正在将动态内存分配给PlayerID

Allocating Dynamic Memory to PlayerID

本文关键字:分配 PlayerID 内存 动态      更新时间:2023-10-16

几个小时以来,我一直在努力研究如何在玩家加入服务器时将动态内存分配给他们,并在他们离开时将其销毁。

我试过很多东西,我试过制作一个指针数组。。。这将允许我使用指针和阵列位置访问具有玩家ID的信息:

int *pInfo[MAX_PLAYERS]; // Global
//Function Local
CPlayers p;
pInfo[playerid] = p;

这不起作用,它告诉我它无法将类初始化转换为内存指针。

我尝试了同样的方法,改为使用以下行:

std::unique_ptr<CPlayers> pInfo[playerid];

然而,playerid所在的位置需要一个常量表达式,这意味着我不能这样做,除非我知道玩家ID是什么并直接输入。。。这是不可能的,因为我不知道,直到他们的客户端尝试连接。

有人有一个解决方案可以让我动态地制作内存,并通过playerid访问这些内存吗。或者以其他方式,我在游戏中无限期地使用客户信息。

由于我已经没有什么想法了。。。我在网上找不到任何东西。我也是新来的,所以可能有些功能我看得太多了。

谢谢。

您可以使用MAP容器来完成此操作。理想是你有两个值。第一个是playerID,第二个是动态内存引用,包含其属性。下面是一个简单的例子来证明这个概念。

#include <map>
#include <memory>
#include <iostream>
int main()
{
    std::map<int, std::unique_ptr<int>> pinfo;
    // Inserting some elements.
    pinfo.emplace(1, std::unique_ptr<int>(new int{3}));
    pinfo.emplace(800, std::unique_ptr<int>(new int{700}));
    for (auto& i: pinfo)
        std::cout << "Player " << i.first << ", value " << *i.second.get() << std::endl;
    // Deleting. Note that, due unique_ptr, the memory is deallocated automatically
    pinfo.erase(1);
    std::cout << "Player 1: deleted" << std::endl;
    for (auto& i: pinfo)
        std::cout << "Player " << i.first << ", value " << *i.second.get() << std::endl;
}