重置对象而不调用复制构造函数?

jma*_*erx 1 c++

我有一个无法复制的对象,一个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)

每次没有堆重新分配,我该怎么做才能做到这一点?

我可以把它做成一个指针而只是新的,每次删除但在这种情况下不应该这样做.我没有使用多态.

谢谢

Dav*_*eas 5

免责声明:我认为这个问题没有多大意义.您声称该对象有许多未在构造函数中初始化的字段,这反过来意味着您的代码不会触及这些字段...因此复位的定义似乎不准确.

无论如何,技术上你可以调用析构函数然后构造到位:

m_game.~NetGame();
new (&m_game) NetGame();
Run Code Online (Sandbox Code Playgroud)

从技术上讲,你甚至不需要调用析构函数,如果它没有副作用或程序不依赖于这样的副作用......但如果你决定遵循这条路径,我会调用析构函数.

但我敦促您重新考虑设计并实际提供一个reset()成员函数,初始化NetGame需要重置的所有成员.

  • @Milo:`std :: vector`有一个默认的构造函数,无论你是否在构造函数中提到它,它都将在初始化列表中调用,因此构造函数*会初始化该成员. (2认同)