本帖最后由 isdkz 于 2023-5-16 16:33 编辑
[b]你的代码中有一些错误。如果你想将已经存在的对象的地址赋值给类的成员变量 Animal *animals[10],你不应该在此之前给 animals 的元素分配新的空间。如果你这样做,会导致内存泄漏,因为你将丢失对这些新分配的 Animal 对象的引用。
你的代码应该是这样的:
// 创建 Cat 对象数组
Animal Cat[10];
// 你的类的成员变量
Animal *animals[10];
// 将 Cat 对象的地址赋值给 animals
for (int i = 0; i < 10; i++) {
animals[i] = &Cat[i];
}
在这段代码中,我们将每个 Cat 对象的地址赋值给了 animals 数组中对应的元素。这样,animals[i] 指针就指向了 Cat[i] 对象。
注意,这里我们没有使用 new 创建新的 Animal 对象,而是使用了已经存在的对象的地址。因此,我们也不需要在析构函数中使用 delete 来释放这些地址,因为这些 Cat 对象会在它们的生命周期结束时自动被销毁。
如果你在给 animals 分配新空间后,再将 Cat 对象的地址赋值给 animals,那么你之前使用 new 分配的空间会丢失引用,无法被访问和释放,这就产生了内存泄漏。[/b] |