【发布时间】:2014-08-23 16:02:59
【问题描述】:
我有一个包含数据向量的单例类。我的问题是我想使用标准的 push_back() 方法向该向量添加数据。我有一个要保存在该向量中的对象,但它是一个本地对象(在另一个类的方法中创建)。显然,在此方法结束时,局部变量将被删除,这很好,因为我对该向量执行了 push_back()。
现在,只要方法没有结束,它就可以正常工作。结束后数据就没有了。这看起来很奇怪,因为 push_back() 应该使用复制构造函数对吗?现在,我尝试通过引用、值、指针和 C++11 中的移动构造函数将局部变量添加到向量中,但所有这些似乎都不起作用。
所以这是问题类的设置:
- ConnectionManager(保存向量)
- ClassA(具有本地 typeX 对象的方法)
所以,简而言之,我希望在 ClassA 中的方法中创建的对象在该方法之后可用,但在 ConnectionManager 类的向量中。
编辑:这是我所说的 typeX:
struct Connection
{
SOCKET socket;
PlayerData* pPlayerData;
};
socket 只是普通的 winsock SOCKET 变量,PlayerData* 是使用 Google 的 ProtocolBuffer 创建的自定义对象。
进一步编辑:
这就是我创建数据的方式:
Predefined::Connection connTemp;
connTemp.socket = 0;
connTemp.pPlayerData = data;
MultiplayerData::GetInstance()->AddPlayerToGame(connTemp);
connTemp.pPlayerData,回答这个问题,是一个本地创建的变量,但它是作为指针创建的。
【问题讨论】:
-
你能告诉我们problematic类型
typeX吗? -
我把它添加到主要问题中
-
pPlayerData是否指向局部变量? -
谁管理
PlayerData的生命周期? -
你在应用三/五规则吗?