簡體   English   中英

刪除c向量的int向量數組

[英]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[]內存。
  • 您可以將此義務傳遞給智能指針,即實現所有權策略的對象,該策略將負責正確的解除分配。
  • 您應該盡可能避免動態內存分配,並且更喜歡RAII等方案進行內存管理。

以供參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM