簡體   English   中英

重置對象而不調用副本構造函數?

[英]Reset an object without invoking copy constructor?

我有一個無法復制的對象,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;
}

每次都沒有堆重新分配怎么辦?

我可以將其設置為指針並只是新建一個指針,每次都將其刪除,但是在這種情況下這不是必需的。 我沒有使用多態。

謝謝

免責聲明:我認為這個問題沒有多大意義。 您聲稱該對象有許多未在構造函數中初始化的字段,這又意味着您的代碼將不會觸及這些字段...因此, reset的定義似乎並不精確。

無論如何,從技術上講,您可以調用析構函數,然后就位構建:

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

從技術上講,如果析構函數沒有副作用,或者程序不依賴於此類副作用,則您甚至不需要調用析構函數。但是, 如果您決定遵循這種方式,我還是會調用析構函數。

但我敦促您重新考慮設計,並提供一個reset()成員函數,該函數初始化需要重置的NetGame所有成員。

您可以只為NetGame類編寫一個reset方法。

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM