从数组中删除对象

时间:2012-05-03 04:57:31

标签: c++ arrays destructor

我正在创建一个使用

声明的对象数组的程序
Element * elements = new Element[number];

其中元素是class,它需要/需要自己的析构函数。

当我去删除时,我会使用数组删除,让程序担心调用析构函数:

delete [] elements;

或者使用关键字delete显式调用每个项目的析构函数:

for(int ii = 0; ii< ArraySize; ii++)
    delete elements[ii];
delete [] elements;

注意:我理解我可能会使用类似boost::ptr_vector的内容,但我希望类似于hashTable功能(因此for循环需要其他信息,但这不在直接范围内这个问题)这就是我使用传统阵列的原因。我仍然想知道需要哪种行为来避免内存泄漏。

2 个答案:

答案 0 :(得分:3)

第一个。你应该

delete [] elements;

第二个是不正确的,如果你试图编译它会给你错误。

答案 1 :(得分:1)

是的,delete [] elements;就足够了。

您可以使用第二段代码:

Element **elements;

elements = new Element *[rows];
for (int i=0; i<rows; i++)
    elements[i] = new Element;

这种组合虽然很少有意义。至少要有一点意义,每一行本身也是一个动态分配的数组:

elements = new Element *[rows];
for (int i=0; i<rows; i++)
    elements[i] = new Element[row_len];

在这种情况下,您的删除操作类似于:

for (int i=0; i<rows; i++)
    delete [] elements[i];
delete [] elements;

然而,正如你现在所做的那样,你所说的一切都不能证明家庭动态分配的合理性。 std::vector<Element> elements(number);可以很好地运作。