在c ++中删除对象是否意味着删除其成员?

时间:2018-11-26 18:56:21

标签: c++ memory-management

我刚接触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的析构函数也已被一致调用并释放了内存?还是我必须为此编写一个合适的方法?

我希望问题清楚...

1 个答案:

答案 0 :(得分:4)

如果您使用new分配了内存,则也需要delete,如下所示:

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

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

看看the rule of three/five/zero

使用std::vector<int>代替原始指针会更好。