将动态内存分配给PlayerID

时间:2014-09-04 00:43:54

标签: c++ arrays class oop dynamic-memory-allocation

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

我尝试了很多东西,我尝试过制作一系列指针......这样我就可以使用指针和数组位置访问玩家ID信息了:

int *pInfo[MAX_PLAYERS]; // Global

//Function Local
CPlayers p;
pInfo[playerid] = p;

哪个不起作用,它告诉我它不能将类初始化转换为内存指针。

我尝试了同样的事情,改为:

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

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

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

由于我已经没有想法......我无法在网上找到任何东西。我也是新手,所以可能会有我看过的功能。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用MAP容器来执行此操作。意思是你有2个值。第一个是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;
}