2011-09-13 128 views
1

我有一個指向其他對象的指針數組,稱爲Comparable *數組(在類的模板內)。是否刪除[]釋放指針分配的內存指針

據我所知,刪除刪除指針引用的內存,並且delete []釋放分配給數組中每個指針的內存。

我的問題是如果我有一個數組包含指向其他對象的指針,如何取消分配數組中的每個指針和數組本身所引用的內存?

+3

-1不張貼代碼。代碼使得問題*容易理解而不必做出任何假設*是非常常見的。 – Nawaz

+6

+1儘管發佈代碼通常是一個好主意,但許多開發人員需要學習閱讀純文本而不僅僅是程序。在這種情況下,純文本足以說明問題。 –

+0

[相關的答案](http://stackoverflow.com/questions/4260464/does-stdlistremove-method-call-destructor-of-each-removed-element/4261074#4261074)和[相關的常見問題](http:// stackoverflow.com/questions/4810664/) – fredoverflow

回答

8

如果我有一個數組包含指向其他對象的數組,我該如何取消分配數組中每個指針引用的內存和數組本身?

你剛纔所描述的方式:)遍歷數組中刪除的所有對象,然後刪除該數組:

for (int i = 0; i < n; ++i) 
    delete array[i]; 
delete[] array; 
+0

+1,並且記住,在指向數組的指針數組的情況下,循環刪除也應該是'delete []'。總之,任何'新類型[n]'需要'刪除[]'。很好的答案。 – WhozCraig

5

delete []調用數組中每個對象的析構函數,如果存在這樣的析構函數的話。對於指針數組,delete []不會釋放每個指針,因爲指針是純粹類型而沒有析構函數。您需要刪除代碼中的每個指針。

+4

我的額頭上紋有「指針沒有破壞者」。 – fredoverflow

1

您需要遍歷數組以取消分配數組索引引用的位置,並且需要在循環後的末尾釋放數組本身。

注:假設你已經使用new[]

0

沒有動態分配的,事實並非如此。使用new[]刪除分配的對象數組,而不是指針數組。

+0

'一個對象數組'?我會說* delete []刪除指針指向的內存,使用new [] *分配。 – Nawaz

+0

@Nawaz:錯了。除了釋放內存外,'delete []'也調用對象析構函數。 –

+0

@Nawaz:變量和數組元素是C++中的對象。作爲數組本身:) – fredoverflow