C++:删除派生类实例的正确方法是什么?

Ofe*_*Ron 2 c++ inheritance destructor

假设我们有:

class A {
protected:
    int* iArr;
    float *fArr;
public:
    A(int* iArr,float *fArr);
    ~A();
}

class B : public A {
private:
    double *dArr;
public:
    B(int* iArr,float *fArr,double *dArr);
    ~B();
}
Run Code Online (Sandbox Code Playgroud)

我的意思是它只会调用B的析构函数,但是当我在Visual C++上运行它时,我发现在破坏B的实例时它会调用A然后调用B析构函数.

那么在派生类中编写析构函数的正确方法是什么?我总是需要假设父类会处理删除所有内容,但只有派生类有什么?

编辑:

  1. 如果是这样,那么如果孩子只用重写函数扩展父类,那是否意味着我将孩子的析构函数留空了?

  2. 如果我想改变它怎么办?我的意思是,如果我只想要调用子析构函数?有没有办法做到这一点?

NPE*_*NPE 6

总之,是的.

父类的析构函数总是被自动调用.它的工作是释放父类使用的所有资源.

子类的析构函数负责释放特定于子类的内容.

此外,如果您通过指向父类的指针删除子类的实例,则需要使父类的析构函数为virtual.请参阅何时使用虚拟析构函数?