让我们说
class A {
A* array;
public:
A (){
array= new A [4];
}
~A (){
delete array;
}
}
如果我们在堆上创建像
这样的对象,我们如何释放对象A* object_ptr =new A();
我对释放指向包含另一个指针的对象的指针感到有点困惑.....
答案 0 :(得分:7)
调用
delete object_ptr;
后
A* object_ptr =new A();
将调用A
指向的object_ptr
的析构函数。这意味着,如果你搞错了
~A (){
delete array;
}
到
~A (){
delete[] array;
}
你的代码没问题,内部指针正确释放。
但是,确实应该使用std::vector
而不是new[]
。它会让你的生活变得更轻松。如果您坚持使用new[]
,请阅读The Rule of Three。
答案 1 :(得分:3)
有两点需要注意。
[]
。例如:delete [] array;
delete object_ptr;
删除指针。要注意的另一个重点是复制对象时会发生什么。如果你的对象得到了副本,你就会遇到一个问题,一个析构函数从另一个对象下面删除指针。这就是为什么shared_ptr
是原始指针的一个很好的替代方法(有关如何使用shared_ptr
,请参阅this question)。