2013-05-08 97 views
0
std::vector<Object *> pVector; 

當超出範圍時,指針的數組/向量是否可以自動刪除每個指針元素?或者必須手動刪除每個對象?是指針的數組/向量可以刪除指針自動?

所以如果我可以這樣認爲:如果vector/array存儲無指針元素,它會自動調用deconstructor?但如果存儲指針,它應該手動刪除元素?

回答

2

vector正確銷燬儲存的物品IN該載體。析構函數將被調用。如果你有一個指針向量,那麼這意味着指針自己的析構函數(而不是它指向的內容)。

原始指針的析構函數什麼都不做。這是你想要的,如果你有一個非擁有指針指向另一部分程序將銷燬的對象。

智能指針的析構函數會執行任何必要的操作來確保對象在正確的時間被釋放。對於unique_ptr,那就是現在。對於shared_ptr,只要參考計數達到零即可。

使用正確類型的指針和信任向量觸發與該指針相關聯的行爲,當元素被擦除時。

0

沒有,vector只會刪除其持有的內存,這也是內存來容納指針 - 實際上,這將是一些大小的數組如:

Object **array = new Object*[size]; 

當調用析構函數,所有被刪除的都是這個數組存儲:

delete[] array; 

正如你所看到的,這不會釋放那些指針指向的內容。這就是爲什麼你應該使用vectorunique_ptrshared_ptr而不是原始指針。

0

當std :: vector被銷燬時,它調用Object *析構函數而不是Object,所以只有指向內存的指針被銷燬。

您應該使用智能指針(std::shared_ptr<Object> or std::unique_ptr<Object>),或者boost::ptr_vector<Object>這將爲您管理內存。