2011-09-13 132 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