[英]deleting c-style array of int vectors
我宣布:
vector<int> * part = new vector<int>[indmap];
好吧,我知道:“你為什么不宣布一個矢量向量?”。 下次我會這樣做,但現在我想了解更多關於我無法解決的向量的問題。
現在我想釋放所有資源,我該做什么?
delete[] part;
但在刪除數組之前,我該怎么做才能刪除所有的矢量對象?
不,你沒有。 這里有一個簡單的規則(當你不使用智能指針 ) - 使用delete
當您使用new
。
所以,這里只有一個new[]
,你只需要一個delete[]
。
@Joachim Pileborg是對的,但是你會有更多的new
,所以,你需要更多的delete
。
這取決於矢量的內容。 如果它包含原始指針(如int *
),則需要迭代向量並手動刪除所有條目。 否則,如果它只包含基本類型或對象(不是它們的指針)或智能指針 ,它將自動處理。
使用delete
,在取消分配之前調用指向對象的析構函數(執行此操作時,使用new
創建對象時)。
類似地,當您使用數組版本delete[]
時,將調用所有已創建對象的析構函數(當您使用new[]
分配了一個對象數組時,請執行此操作)。
std::vector<T>
的析構函數自動調用包含對象的析構函數。
因此,正如Joachim Pileborg在他的回答中指出的那樣,你需要手動刪除向量的對象,只有當你有指向動態分配對象的原始指針(例如,由new
分配的對象)並且你負責刪除(即你擁有它們)。 原始指針沒有會破壞指向對象的析構函數,因此在這種情況下,您必須迭代向量以手動刪除對象。 否則,可以簡單地銷毀向量(或者在這種情況下刪除數組)。
根據經驗:
delete
使用new
分配的內存。 new[]
delete[]
已分配的delete[]
內存。 以供參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.