删除指向包含另一个指针的对象的指针
C++ Deleting a pointer to a object that contains another pointer
比如
class A {
A* array;
public:
A (){
array= new A [4];
}
~A (){
delete array;
}
}
如果在堆上创建了像
这样的对象,该如何释放对象呢?A* object_ptr =new A();
我有点困惑释放指针指向一个对象包含另一个指针.....
呼叫
delete object_ptr;
后A* object_ptr =new A();
将调用object_ptr
所指向的A
的析构函数。这意味着,如果你修改了错误的
~A (){
delete array;
}
~A (){
delete[] array;
}
你的代码会很好,内部指针被正确释放。
然而,你真的应该使用std::vector
而不是new[]
。这会让你的生活轻松很多。如果你坚持new[]
,请阅读"三的规则"。
有两点需要注意。
- 删除数组时,应该使用
[]
。例如:delete [] array;
当删除指针时,将调用分配对象的析构函数。你可以从代码中调用:
delete object_ptr;
来删除指针。另一个需要注意的重点是当你复制你的对象时会发生什么。如果对象被复制,就会出现析构函数从另一个对象下删除指针的问题。这就是为什么shared_ptr
是原始指针的一个很好的替代品(参见如何使用shared_ptr
的问题)。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它