2013-09-26 70 views

回答

18

編譯器允許評估以下順序的表達:

auto __temp1 = new int(42); 
auto __temp2 = g(); 
auto __temp3 = shared_ptr<int>(__temp1); 
f(__temp3, __temp2); 

你可以看到,如果g()拋出,那麼分配的對象永遠不會被刪除。

使用make_shared,在分配對象和初始化智能指針來管理它之間什麼也不能。

+0

+1。是的,這就是我正要寫這篇文章的原因,但我首先談到了構造函數,然後就搞砸了。 – Nawaz