我正在创建一个使用
声明的对象数组的程序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循环需要其他信息,但这不在直接范围内这个问题)这就是我使用传统阵列的原因。我仍然想知道需要哪种行为来避免内存泄漏。
答案 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);
可以很好地运作。