首页 > 解决方案 > 在 C++ 中删除一个对象意味着删除它的成员?

问题描述

我对 c++ 很陌生,我有一个问题。

如果我有一个包含(指向a)向量的类:

class myClass {
public:
    int* direction;
    myClass(int d){direction=new int[d];}
}

当我创建一个对象并在主中删除它时:

int main(){
    int d;
    myClass* myvec;
    myvec = new myClass(d);
    delete myvec;
}

还连贯地调用了 myvec->direction 的析构函数并释放了内存?还是我必须为此编写一个合适的方法?

我希望问题很清楚...

标签: c++memory-management

解决方案


如果您已经分配了内存,new那么您也需要delete它,如下所示:

class myClass {
      int* direction;
public:
      myClass(int d) : direction(new int[d]) {}
      ~myClass() {
          delete[] direction;
      }
}

但是您还需要编写一个复制构造函数和复制赋值运算符,并且在 C++11 和更高版本中还需要一个移动构造函数和移动赋值运算符,这样才能正常工作。否则,当您使用此类的实例时,您将冒着复制原始指针的默认版本的风险。

看看三/五/零的规则

最好使用 astd::vector<int>而不是原始指针。


推荐阅读