[英]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[] 只會刪除數組中的元素,不會刪除數組元素指向的內存。 如果要刪除數組元素指向的內存
不, delete[]
只釋放由new[]
創建的數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.