我有一個指向其他對象的指針數組,稱爲Comparable *數組(在類的模板內)。是否刪除[]釋放指針分配的內存指針
據我所知,刪除刪除指針引用的內存,並且delete []
釋放分配給數組中每個指針的內存。
我的問題是如果我有一個數組包含指向其他對象的指針,如何取消分配數組中的每個指針和數組本身所引用的內存?
我有一個指向其他對象的指針數組,稱爲Comparable *數組(在類的模板內)。是否刪除[]釋放指針分配的內存指針
據我所知,刪除刪除指針引用的內存,並且delete []
釋放分配給數組中每個指針的內存。
我的問題是如果我有一個數組包含指向其他對象的指針,如何取消分配數組中的每個指針和數組本身所引用的內存?
如果我有一個數組包含指向其他對象的數組,我該如何取消分配數組中每個指針引用的內存和數組本身?
你剛纔所描述的方式:)遍歷數組中刪除的所有對象,然後刪除該數組:
for (int i = 0; i < n; ++i)
delete array[i];
delete[] array;
+1,並且記住,在指向數組的指針數組的情況下,循環刪除也應該是'delete []'。總之,任何'新類型[n]'需要'刪除[]'。很好的答案。 – WhozCraig
delete []調用數組中每個對象的析構函數,如果存在這樣的析構函數的話。對於指針數組,delete []不會釋放每個指針,因爲指針是純粹類型而沒有析構函數。您需要刪除代碼中的每個指針。
我的額頭上紋有「指針沒有破壞者」。 – fredoverflow
您需要遍歷數組以取消分配數組索引引用的位置,並且需要在循環後的末尾釋放數組本身。
注:假設你已經使用new[]
沒有動態分配的,事實並非如此。使用new[]
刪除分配的對象數組,而不是指針數組。
'一個對象數組'?我會說* delete []刪除指針指向的內存,使用new [] *分配。 – Nawaz
@Nawaz:錯了。除了釋放內存外,'delete []'也調用對象析構函數。 –
@Nawaz:變量和數組元素是C++中的對象。作爲數組本身:) – fredoverflow
-1不張貼代碼。代碼使得問題*容易理解而不必做出任何假設*是非常常見的。 – Nawaz
+1儘管發佈代碼通常是一個好主意,但許多開發人員需要學習閱讀純文本而不僅僅是程序。在這種情況下,純文本足以說明問題。 –
[相關的答案](http://stackoverflow.com/questions/4260464/does-stdlistremove-method-call-destructor-of-each-removed-element/4261074#4261074)和[相關的常見問題](http:// stackoverflow.com/questions/4810664/) – fredoverflow