簡體   English   中英

刪除指針數組

[英]Deleting array of pointers

delete[] a (其中a是動態分配的指針數組)是否對數組中的每個指針執行delete

我想,它為具有用戶定義類的數組執行析構函數,但是指針發生了什么?

不, delete []用於刪除數組。 如果需要刪除數組元素,則需要對每個元素調用delete

不。原始指針不包含有關如何(或是否)釋放目標的信息,因此銷毀一個永遠不會刪除目標。

這就是為什么您永遠不應該使用它們來管理動態資源的原因——您必須自己完成所有工作,這很容易出錯。 相反,您應該使用RAII ,用容器、智能指針和其他管理資源並在銷毀時自動釋放它們的類替換指針。 std::vector (或std::vector<std::unique_ptr>替換你的動態數組,如果你真的需要單獨分配每個對象),一切都將自動解除分配。

不,如果a是動態分配的原始指針數組,則delete[] a; 只是刪除存儲占領了原始指針數組,但它並沒有要求指着對象的析構函數。

所以,如果這些原始指針擁有指針,你就有泄漏:)

使用帶有智能指針STL 容器類,例如std::vector<std::unique_ptr<X>> ,以獲得更現代和更簡單的方法:通過這種方式,您可以獲得異常安全性和兩個數組的自動銷毀指針和指向的對象。

delete[]調用數組每個元素的析構函數 由於指針是一種基本類型,它實際上沒有析構函數,因此它什么也不做。

這正是使用智能指針的原因: delete[]將調用每個元素的析構函數,智能指針的析構函數將調用托管指針上的delete

所以: 了解智能指針並停止手動管理內存。 它更容易,更不容易出錯,而且級別更低。

delete[] 只會刪除數組中的元素,不會刪除數組元素指向的內存。 如果要刪除數組元素指向的內存

  1. 通過對每個數組元素調用 delete 來顯式刪除每個內存
  2. 然后通過 delete[] 運算符刪除數組

不, delete[]只釋放由new[]創建的數組

有關更多信息,請參閱參考資料。

暫無
暫無

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

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