這是安全嗎?std :: unique_ptr與數組指針
std::unique_ptr<A> ptr(new A[100]);
當ptr
超出範圍,析構函數調用,將它錯誤地delete
指針,或delete[]
呢?
這是安全嗎?std :: unique_ptr與數組指針
std::unique_ptr<A> ptr(new A[100]);
當ptr
超出範圍,析構函數調用,將它錯誤地delete
指針,或delete[]
呢?
你必須正確地指定unique_ptr
將舉行的類型,它才能正常工作:
std::unique_ptr<A[]> ptr(new A[100]);
這將默認使用delete[]
而不是delete
有刪除。
如果您正確指定指向類型爲A[]
它將正確delete[]
指針,因爲數組類型有unique_ptr
的模板特化。
請注意,如果可以自動推斷此類型,您就不會有機會出錯。這將需要產生該指針是一個函數調用(在相同的靜脈作爲std::make_pair
)的表達,這樣的:
auto ptr = make_unique(new A[100]);
這是這是一個從C++ 11缺少一個有用的工具,但它一直添加到C++ 14。