gpt4 book ai didi

c++ - 使用C++中的Delete避免内存泄漏

转载 作者:行者123 更新时间:2023-12-03 07:11:36 24 4
gpt4 key购买 nike

我有以下代码:

class A{
A(){};
};

class B{
A **a;
public:
B(){
a = new A*[10];
}
~B(){
delete[] a;
}
};

int main()
{

B* b1 = new B();

//delete B;
return 0;
}
我想知道对main中的动态对象b1正确的删除是什么?据我了解,我们不需要在main中添加删除,因为对象B是动态指针数组,并在返回时调用析构函数。那正确吗?

最佳答案

we don't need to add a delete in main since the object B as a dynamic array of pointers and calls the destructor on return. Is that right?


不,那是错的。
如果您使用 new分配了某些内容,而没有使用 delete取消分配了该指针,则分配将泄漏。
附言 B是非常不安全的,因为它是可复制的,但是复制它会导致未定义的行为。

what is the proper delete for dynamic object b1 in main?

b1不是动态对象。它是一个指向动态对象的指针。
管理动态分配的正确方法是不使用裸拥有的指针。另外,应避免不必要的动态分配。例:
class B{
std::vector<A*> a;
public:
B() : a(10){}
};

int main()
{
B b;
}

关于c++ - 使用C++中的Delete避免内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65074940/

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