2014-02-15 205 views
0

我是在嘗試學習C++ 11唸叨移動構造函數重置並指出與移動構造函數

此舉構造復位源指針rhs.data_。這樣, 當臨時被銷燬時,刪除[]將被無害地應用 到一個空指針。

現在筆者做這樣的事情

MemoryPage(MemoryPage&& other): size(0), buf(nullptr) 
{ 
    // pilfer other’s resource 
    size=other.size; 
    buf=other.buf; 
    // reset other 
    other.size=0; 
    other.buf=nullptr; 
} 

我的問題是,如果other.buf實際上是一個指針是不是想成爲

delete other.buf; 

爲什麼我們簡單地分配nullptr在重置過程中?不會最終成爲內存泄漏?

+0

移動ctor與摧毀或釋放任何東西無關。 – user2485710

回答

5

我的問題是,如果other.buf實際上是一個指針是不是想成爲

delete other.buf; 

沒有,因爲早一行復制指針this->buf

buf=other.buf; 

移動構造函數正在使用任何內存b來自other對象,並確保other將被安全銷燬。

這裏是什麼招構造其實就是做很好的說明:

右值引用,又名「移動建築/分配,」是表達你是從一個對象建造或分配有用 方式 將不再用於其他任何事情 - 包括對於 示例,臨時對象 - 所以您通常可以通過簡單地竊取其他對象的內臟 而不是進行潛在的昂貴深度複製來獲得體面的 性能提升。

http://herbsutter.com/2007/05/10/trip-report-april-2007-iso-c-standards-meeting/

所以這行:

buf=other.buf; 

實際上是 「偷其他對象的膽量。」另一個物體不再需要它們,它很快就會消失。