如果初始化一個unique_ptr
這樣的:的std :: ::的unique_ptr復位和構造異常
std::unique_ptr<Foo> i;
i.reset(new Foo());
但異常是從Foo::Foo()
拋出,問題是:與記憶發生了什麼分配呢? unique_ptr如何避免泄露?這是在new
運營商內部處理的東西嗎?
當範圍退出時,析構函數肯定會被調用。由於reset
調用不會被調用,直到new Foo()
返回,似乎這個必須由new
處理,當異常離開構造函數時釋放分配的內存。
這是怎麼回事?
請參閱http://stackoverflow.com/questions/4094996/what-happens-to-the-memory-allocated-by-new-if-the-constructor-throws – Jon