所以说我有
foo* fooObject1 = new foo[10];
// here would go code for initializing fooObject1[0] to fooObject1[9] with a foo object for each.
foo* fooObject2 = new foo[30];
for(int = 0; i < 10; i++)
fooObject2[i] = fooObject1[i];
if(fooObject1 != NULL)
delete[] fooObject1; //this "destroys" the array, BUT ALSO calls the destructors of all the foo objects inside fooObject1, causing fooObject2 elements to be anything but what it was before.
fooObject1 = fooObject2;
其中
foo
是我用其各自的方法创建的特定对象。然而,我的问题是我想销毁 fooObject1 指向的数组,而不是数组的元素,有没有办法在 C++ 中完成?我知道解决这个问题的另一种方法是重载 = (equals) 运算符,但是在我需要它的程序中,编写这将包括为许多其他类重载许多其他 = 运算符,这使其成为一个乏味而漫长的过程.
我希望以某种方式可以将对象保留在 fooObject2 中,但摆脱 fooObject1 指向的数组。那么这能做到吗?如何?如果不是,那么是否有网站可以重定向我阅读它?
最佳答案
这些都是独立的。您的 fooObject2 数组已像 fooObject1 一样分配,并且一直为每个数组触发赋值运算符。您实际上拥有 fooObject2 中 fooObject1 中每个对象的拷贝。
你不能放弃 fooObject1。你需要删除[]它,否则你会泄漏内存。 fooObject2,正如所写的那样,是独立的 ,除非您在 fooObject 类中有内部指针并且由于您没有遵循 Rule of Three 而执行了浅拷贝。
在清理 fooObject1 并删除其先前的内存分配后,最后一行将 fooObject1(指针)设置为指向与 fooObject2 相同的对象,仅供引用,但在进行该引用后不要同时删除它们;只删除一个。
关于c++ - 解构对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12649956/