2015-10-13 91 views
4

如果我按如下方式將unique_ptr指向STL容器的實例,該怎麼辦?這段代碼安全嗎?是一個指向STL容器安全的指針嗎?

unique_ptr< vector<int> > p1(new vector<int>); 

這是不是導致的析構函數vector<int>被調用兩次,因爲兩者的vector<int>本身和unique_ptr都試圖清理內存的vector<int>迄今取得的?這可能導致未定義的行爲?或者編譯器以某種方式知道vector<int>已經釋放了它的內存,並且爲了unique_ptr超出範圍而不再調用析構函數?

這只是爲了理解,如果有人愚蠢到這樣做,它會是危險的嗎?

+5

對你的代碼沒有任何不安全的感覺,但它實際上不太可能需要'unique_ptr >' – Praetorian

回答

6

With unique_ptr< vector<int> > p1(new vector<int>); the unique_ptr withon vectorvector的析構函數將釋放自己分配的內存。 所以它很安全。

但是vector<int>就夠了。我沒有看到你想要的案例unique_ptr< vector<int> >

+0

但是這不會導致兩次調用vector的delete嗎? –

+0

@FirstJens第二個電話從哪裏來? –

+0

@SamiKuhmonen當'unique_ptr'超出作用域時,它調用析構函數,當'vector '超出作用域時,它會再次調用它自己的析構函數。沒有? –

相關問題