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

时间:2012-06-16 02:48:06

标签: c++

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

每次没有堆重新分配,我该怎么办呢?

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

由于

2 个答案:

答案 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();
}
相关问题