[英]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.