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析构函数.
那么在派生类中编写析构函数的正确方法是什么?我总是需要假设父类会处理删除所有内容,但只有派生类有什么?
编辑:
如果是这样,那么如果孩子只用重写函数扩展父类,那是否意味着我将孩子的析构函数留空了?
如果我想改变它怎么办?我的意思是,如果我只想要调用子析构函数?有没有办法做到这一点?
总之,是的.
父类的析构函数总是被自动调用.它的工作是释放父类使用的所有资源.
子类的析构函数负责释放特定于子类的内容.
此外,如果您通过指向父类的指针删除子类的实例,则需要使父类的析构函数为virtual.请参阅何时使用虚拟析构函数?