c++类的析构函数包含ptr到对象的数组

C++ destructor for class contains array of ptr to objects

本文关键字:对象 ptr 数组 包含 析构函数 c++      更新时间:2023-10-16

例如,如果我们有两个类

class A{
  int size;
  A** arr;
}
class B{
  int size;
  A** arr;
}
对于A的构造函数,我写:
A::A(){
  this->arr=new A* [20];
}
对于B的构造函数,我写:
B:B(){
  this->arr=new A* [20];
}

对于A的析构函数,我写:

A:~A(){
  for(int i=0;i<this->size;i++){
    delete this->arr[i];
  }
  delete [] this->arr;
}
对于B的析构函数,我写:
  B:~B(){
  for(int i=0;i<this->size;i++){
    delete this->arr[i];
  }
  delete [] this->arr;
}

请注意,当我将更多的对象放入arr时,大小将会增长。现在我的问题是,虽然我在测试,没有什么问题,但在主程序返回后,它给了我段错误?

在我看来,这是一个不实现复制构造函数并通过复制传递实例的经典案例。您应该阅读一两篇关于c++中内存管理的文章,或者使用shared_ptr/unique_ptr。

您也应该在构造函数中初始化size。

A::A(){
   this->size=20;
   this->arr=new A* [20];
}

B