c++对象的深度删除
Deep delete of C++ objects
我有一个结构体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。为了彻底摆脱这些问题,永远不要像你的问题中描述的那样使用原始指针。使用智能指针,然后删除将自动为您执行所需的顺序。
让我们把事情弄清楚。A
有B* C;
,它应该存储指向自由存储对象的指针(这一点并不明显,它可以指向任何东西)。
现在在A
的析构函数中,您需要删除指向C
的指针,否则您将获得内存泄漏
每个新的调用都会产生一个新的内存分配,并且每个调用都应该重新分配。如果不这样做,就会出现内存泄漏问题。
对于类来说,解决这个问题的一个好办法是把它变成A的析构函数。
~A::A(){
delete this->C;
}
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- 在c++中,does delete[]深度删除一个结构
- c++对象的深度删除