2016-04-20 86 views
3
#include <new> 

struct House { }; 
struct Room 
{ 
    House& h; 
    Room(House& h) : h(h) { } 
}; 

int main() 
{ 
    House h1; 
    House h2; 

    Room r(h1); 

    //r = Room(h2); // This obviously won't work. 

    /// 
    r.~Room(); 
    new(&r) Room(h2); // This does work  
} 

我已經在我的項目中使用的參考成員在一個地方,我不知道它是安全的使用這一招的方式與不同的重新初始化對象的引用成員的對象參考。放置新的重新初始化有

+1

'new(r)'應該是'new(&r)'。 – interjay

+0

我從來沒有見過像這些(有parens)的'new'語法,它有什麼作用?我從來沒有見過在任何C++書中提到過的我讀過 – johnbakers

+4

從形式上說,它不會重新初始化對象,但會破壞對象,然後在舊對象中創建一個新對象。非正式地,這通常表明您的設計應該重新初始化。 – molbdnilo

回答

0

使用貼裝新版是一種有效的做法。這是安全的,並且您的用法在語義上是正確的。但是,如果沒有您的具體情況,我無法回答您的具體情況的適用性問題。提供的代碼不會顯示您的情況,所以我願意將其視爲一個XY問題,直到我聽到更多。

+0

我只是想知道是否安全,因爲我不確定。我不想開始編寫可能不安全的代碼。 – James

+0

@Phantom,define * safe *。 – SergeyA

+0

@Phantom,或許用未定義的行爲和內存泄漏來形容這個問題? – wally