1

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

如果每次没有堆重新分配,我该怎么做?

我可以把它变成一个指针,然后简单地新建,每次都删除,但在这种情况下,这不应该是必要的。我没有使用多态性。

谢谢

4

2 回答 2

5

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

无论如何,从技术上讲,您可以调用析构函数,然后就地构造:

m_game.~NetGame();
new (&m_game) NetGame();

从技术上讲,如果析构函数没有副作用或者程序不依赖于这种副作用,您甚至不需要调用析构函数......但如果您决定遵循这条路径,我无论如何都会调用析构函数。

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

于 2012-06-16T02:59:15.907 回答
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();
}
于 2012-06-16T03:05:40.790 回答