几个小时以来,我一直在努力研究如何在他们加入服务器时为某个playerid分配动态内存,并在他们离开时将其销毁。
我尝试了很多东西,我尝试过制作一系列指针......这样我就可以使用指针和数组位置访问玩家ID信息了:
int *pInfo[MAX_PLAYERS]; // Global
//Function Local
CPlayers p;
pInfo[playerid] = p;
哪个不起作用,它告诉我它不能将类初始化转换为内存指针。
我尝试了同样的事情,改为:
std::unique_ptr<CPlayers> pInfo[playerid];
然而,它需要一个常量表达式,其中playerid是,这意味着我不能这样做,除非我知道玩家ID是什么并直接输入...这是不可能的,因为我不知道,直到他们的客户试图连接。
有没有人有一个允许我动态制作内存的解决方案,并且可以通过playerid访问此内存。或者其他一些方式,我无限期地在游戏中使用客户信息。
由于我已经没有想法......我无法在网上找到任何东西。我也是新手,所以可能会有我看过的功能。
感谢。
答案 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;
}