正在将动态内存分配给PlayerID
Allocating Dynamic Memory to PlayerID
几个小时以来,我一直在努力研究如何在玩家加入服务器时将动态内存分配给他们,并在他们离开时将其销毁。
我试过很多东西,我试过制作一个指针数组。。。这将允许我使用指针和阵列位置访问具有玩家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;
}
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存
- 使用RAII在给定次数的迭代后重新分配资源