[英]Avoid memory leak with delete in C++
我有以下代码:
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 中动态 object b1 的正确删除是什么? 据我了解,我们不需要在 main 中添加删除,因为 object B 作为指针的动态数组并在返回时调用析构函数。 那正确吗?
我们不需要在 main 中添加删除,因为 object B 作为指针的动态数组并在返回时调用析构函数。 那正确吗?
不,那是错误的。
如果你用new
分配一些东西而不用delete
释放那个指针,那么分配就会泄漏。
PS B
非常不安全,因为它是可复制的,但复制它会导致未定义的行为。
主要动态 object b1 的正确删除是什么?
b1
不是动态 object。 它是一个指针,指向一个动态的 object。
管理动态分配的正确方法是不使用裸拥有指针。 此外,应避免不必要的动态分配。 例子:
class B{
std::vector<A*> a;
public:
B() : a(10){}
};
int main()
{
B b;
}
如果使用new
创建 object,则需要delete
:
B* b1 = new B();
...
delete b1;
或者,您可以使用智能指针,它们会为您调用delete
:
std::unique_ptr<B> b1( new B );
注意:要使用unique_ptr
,您需要包含<memory>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.