我有一个无法复制的对象,一个NetGame,因为它有一个字符串流。
我在课堂上宣布:
NetGame m_game;
稍后在代码中,我只想重置它,不需要复制任何内容。
void ServerTable::setActive( bool active )
{
//reset for now
if(m_active && !active)
{
m_inProgress = false;
m_game = NetGame();
}
m_active = active;
}
每次没有堆重新分配,我该怎么办呢?
我可以把它做成一个指针而只是新的,每次删除但在这种情况下不应该这样做。我没有使用多态。
由于
答案 0 :(得分:5)
免责声明:我认为这个问题没有多大意义。您声称该对象有许多未在构造函数中初始化的字段,这反过来意味着您的代码不会触及这些字段...因此 reset 的定义似乎不准确。
无论如何,从技术上讲,你可以调用析构函数然后构建到位:
m_game.~NetGame();
new (&m_game) NetGame();
从技术上讲,你甚至不需要调用析构函数,如果它没有副作用,或者程序不依赖于这样的副作用......但我会调用析构函数 if 你决定走这条路。
但我建议您重新考虑设计并实际提供reset()
成员函数,以初始化需要重置的NetGame
的所有成员。
答案 1 :(得分:0)
您可以为NetGame类编写重置方法。
void NetGame::reset()
{
/*u can just reset the attribute u need*/
}
然后你可以在setAcitvity函数中调用该方法。
void ServerTable::setActive( bool active )
{
//reset for now
if(m_active && !active)
{
m_inProgress = false;
}
m_active.reset();
}