我有一個靜態分配的對象。此對象沒有operator=
,我需要重建它。重新調用靜態分配對象的構造函數
所以,這確實不爲我工作:
myObj = T(...);
我目前的做法是:
myObj.~T()
new(&myObj) T(...);
但感覺錯了,所以我想知道是否有任何陷阱,我我在這裏失蹤。
我有一個靜態分配的對象。此對象沒有operator=
,我需要重建它。重新調用靜態分配對象的構造函數
所以,這確實不爲我工作:
myObj = T(...);
我目前的做法是:
myObj.~T()
new(&myObj) T(...);
但感覺錯了,所以我想知道是否有任何陷阱,我我在這裏失蹤。
如果對象是靜態分配的,你想重新分配它,而不訴諸UB,最好的辦法是採取範圍的控制,並決定
爲了更好地理解它,讓我們考慮一個例子
void foo()
{
{
Foo obj(...); // obj gets allocated
// Code which uses obj
} // obj gets automatically de-allocated
{
Foo obj; // obj gets allocated (default constructed)
// Code which uses obj
} // obj gets automatically de-allocated
}
將對象創建爲std::experimental::optional
,現在可以隨意重新創建對象。請記住在每次使用前確保它存在。
boost
也有這樣的一個類,根據我的經驗,你也可以推出自己的可選項。
如果你真的必須的話,這是做到這一點的方法。但海事組織的問題是導致你必須這樣做的設計決定。你不能有一個像'reset()'或其他成員函數嗎? – jrok 2014-10-31 17:23:09
*如何靜態分配? 'const'合格? – Deduplicator 2014-10-31 17:23:15
您可以改爲使用靜態unique_ptr,並在指針中分配一個新對象。 – 2014-10-31 17:24:34