2016-12-16 75 views
-3

所以我的移動語義的理解是,這代碼:爲什麼在unique_ptr上使用std :: move會毀掉它?

#include <iostream> 
#include <memory> 

class hello { 
public: 
    ~hello() { 
     std::cout << "destroyed" << std::endl; 
    } 
    hello() { 
     std::cout << "constructred" << std::endl; 
    } 
}; 


void takecontrol(std::unique_ptr<hello>&& ptr) { 

    ptr.release(); 
} 

int main() 
{ 
    auto ptr = std::make_unique<hello>(); 


} 

應該創建一個內存泄漏,只打印「構成的。」

尚未運行時(http://cpp.sh/2upqq)它破壞了對象!

對我來說,它似乎應該被搬進ptrtakecontrol然後釋放,然後不刪除所以它不應該被銷燬。

我缺少什麼?

+9

「我錯過了什麼?」可能會打電話給'takecontrol'嗎? – tkausl

+2

你永遠不會調用'takecontrol'。 –

+2

您的程序調用'takecontrol':http://cpp.sh/9qh3u – chtz

回答

3

如果添加了調用該函數到主

int main() 
{ 
    auto ptr = std::make_unique<hello>(); 

    takecontrol(std::move(ptr)); 
} 

你得到你所期望的行爲。

+1

哇,我看了這個片斷很多次,不知何故錯過了... –

相關問題