removing objects from an array
2012-05-03 17:05 Rollen Holt 阅读(409) 评论(0) 编辑 收藏 举报I am creating a program that uses an array of objects declared with
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];等的的。
而是应该借鉴下面的例子:
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;
原文地址:http://stackoverflow.com/questions/10425354/removing-objects-from-an-array
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================