我有一个无法复制的对象,一个NetGame,因为它有一个字符串流.
我在课堂上宣布:
NetGame m_game;
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,我只想重置它,不需要复制任何东西.
void ServerTable::setActive( bool active )
{
//reset for now
if(m_active && !active)
{
m_inProgress = false;
m_game = NetGame();
}
m_active = active;
}
Run Code Online (Sandbox Code Playgroud)
每次没有堆重新分配,我该怎么做才能做到这一点?
我可以把它做成一个指针而只是新的,每次删除但在这种情况下不应该这样做.我没有使用多态.
谢谢
免责声明:我认为这个问题没有多大意义.您声称该对象有许多未在构造函数中初始化的字段,这反过来意味着您的代码不会触及这些字段...因此复位的定义似乎不准确.
无论如何,技术上你可以调用析构函数然后构造到位:
m_game.~NetGame();
new (&m_game) NetGame();
Run Code Online (Sandbox Code Playgroud)
从技术上讲,你甚至不需要调用析构函数,如果它没有副作用或程序不依赖于这样的副作用......但如果你决定遵循这条路径,我会调用析构函数.
但我敦促您重新考虑设计并实际提供一个reset()成员函数,初始化NetGame需要重置的所有成员.