c++ - 删除对象

标签 c++ pointers new-operator

我是新手,只是想问一个关于删除对象的快速问题。

我有一个名为 MyClass1 的对象,从它我有许多其他类,MyClassA、MyClassB 等。

现在我应该在 MyClass1 中这样做吗:

MyClass1::~MyClass1()
{

delete MyClassA;
delete MyClassB;

}

或者当我删除 MyClass1 时,在 MyClass1 中创建的所有内容都会自动删除吗?

此外,如果我在 MyClassA 和 MyClassB 中创建了更多对象,是否也必须在各自的类中手动删除这些对象?

谢谢

最佳答案

如果您问这个问题,那么您只是在学习 C++,所以最好的建议是——两者都不是。您应该了解这些东西(动态分配和内存管理 - 请参阅 Guillaume 对此的回答),但您真正应该做的是使用RAII(google this)。正确的 C++ 方法是:

struct  MyClass1
{
  MyClassA mA;
  std::shared_ptr<MyClassB> mB;

  MyClass1() : mB(new MyClassB)
  {

  }
};

看到了吗?不再有析构函数,这意味着您也不需要复制构造函数或复制赋值运算符(这是 Guillaume 的答案有缺陷的地方 - 它缺少最后两个)。

关于c++ - 删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114123/

相关文章:

c++ - 指针丢失对前一个节点 C++ 的引用

C++ 返回 MyClass* 与 MyClass

c++ - 动态分配和数组/指针的段错误

调用 malloc() 会覆盖静态表

c++ - 新的数组分配

c++ - 带重载的宏扩展

C:使用双指针的矩阵乘法

go - 在 Go 中返回结构成员或嵌入式结构的指针?

c++ - C++ 中的 "new (&variable) value;"有什么作用?

C++ 新运算符返回新的意外-Dev-cpp