gpt4 book ai didi

C++ 指针数组 : delete or delete []?

转载 作者:IT老高 更新时间:2023-10-28 12:29:33 25 4
gpt4 key购买 nike

考虑以下代码:

class Foo
{
Monster* monsters[6];

Foo()
{
for (int i = 0; i < 6; i++)
{
monsters[i] = new Monster();
}
}

virtual ~Foo();
}

什么是正确的析构函数?

这个:

Foo::~Foo()
{
delete [] monsters;
}

或者这个:

Foo::~Foo()
{
for (int i = 0; i < 6; i++)
{
delete monsters[i];
}
}

我目前有最上面的构造函数,一切正常,但我当然看不到它是否恰好在泄漏......

就我个人而言,考虑到我正在做的事情,我认为第二个版本更合乎逻辑。无论如何,这样做的“正确”方法是什么?

最佳答案

删除[]怪物;

不正确,因为 monsters 不是指向动态分配数组的指针,它 指针数组。作为类成员,当类实例被销毁时会自动销毁。

您的其他实现是正确的,因为数组中的指针确实指向动态分配的 Monster 对象。

请注意,使用您当前的内存分配策略,您可能希望声明自己的复制构造函数和复制赋值运算符,以便无意复制不会导致双重删除。 (如果您想防止复制,可以将它们声明为私有(private)而不实际实现它们。)

关于C++ 指针数组 : delete or delete []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2814188/

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