gpt4 book ai didi

c++ - 解构对象数组

转载 作者:太空狗 更新时间:2023-10-29 20:28:39 26 4
gpt4 key购买 nike

说我有

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++ 中完成?我知道解决该问题的另一种方法是重载 = (等于)运算符,但在我需要它的程序中,编写这将包括为许多其他类重载许多其他 = 运算符,这使得它成为一个乏味且漫长的过程.我希望能以某种方式将对象保留在 fooObject2 中,但摆脱 fooObject1 指向的数组。那么这可以做到吗?如何?如果不是如何,那么是否有一些网站可以重定向我来阅读它?

最佳答案

这些独立的。您的 fooObject2 数组已像 fooObject1 一样分配,并且一直为每个数组触发赋值运算符。您实际上拥有 fooObject2 中 fooObject1 中每个对象的拷贝。

你不能放弃 fooObject1。你需要 delete[] 它否则你会泄漏内存。如所写,fooObject2 是独立的,除非您在 fooObject 类中有内部指针并且因为您没有遵循 Rule of Three 而执行了浅拷贝。 .

在清理 fooObject1 并删除其先前的内存分配后,此代码的最后一行将 fooObject1(指针)设置为指向与 fooObject2 相同的对象,仅供引用,但在进行引用后不要同时删除它们;只删除一个。

关于c++ - 解构对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com