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 に答える