c++对象的深度删除

Deep delete of C++ objects

本文关键字:删除 深度 对象 c++      更新时间:2023-10-16

我有一个结构体a,它有一个成员B *C。我动态地创建t1 = new A,它内部动态地创建C = new b

现在释放分配给C的内存,delete t1是否足够?或者我应该让delete t1后面跟着delete t1->C ?

还有没有更好的方法来完成它在一个镜头?

仅仅删除t1是不够的。您需要确保t1->C也被删除了。但

应该有delete t1后面跟着delete t1->C

反过来!当你删除t1时,你不能再访问t1->C。为了彻底摆脱这些问题,永远不要像你的问题中描述的那样使用原始指针。使用智能指针,然后删除将自动为您执行所需的顺序。

让我们把事情弄清楚。AB* C;,它应该存储指向自由存储对象的指针(这一点并不明显,它可以指向任何东西)。

现在在A的析构函数中,您需要删除指向C的指针,否则您将获得内存泄漏

每个新的调用都会产生一个新的内存分配,并且每个调用都应该重新分配。如果不这样做,就会出现内存泄漏问题。

对于类来说,解决这个问题的一个好办法是把它变成A的析构函数。

~A::A(){
 delete this->C;
}