Element* elements =newElement[number];
where an element is a class
that has/needs a its own destructor.
when I go to delete this would I use just use array delete, and have the program worry about calling the destructor:
delete[] elements;
or do I call the destructor for each item explicitly with keyword delete:
for ( int ii =0; ii<ArraySize; ii++) delete elements[ii]; delete [] elements; |
Note: I understand that I could probably use something like boost::ptr_vector
, but I wanted similar to hashTable
functionality (so the for loop would need additional information, but that is outside of the direct scope of this question) which is why I am using a traditional array. I would still like to know which behavior is needed to avoid memory leaks.
解答:
第一个是正确的,第二个会得到编译错误。
这个问题主要的问题其实是对于多位数组的动态内存分配的问题。比如我们不能直接使用int* p=new int[4][3];等的的。
而是应该借鉴下面的例子:
1 2 3 | elements = new Element *[rows]; for ( int i=0; i<rows; i++) elements[i] = new Element[row_len]; |
然后采用:
1 2 3 | for ( int i=0; i<rows; i++) delete [] elements[i]; delete [] elements; |
原文地址:
==============================================================================
本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/05/03/2480881.html,如需转载请自行联系原作者