如果给定父类A包含定义的析构函数,则B(在创建B对象时将其子执行)会执行吗?即使我没有手动创建也没有继承B类中的A的析构函数?
我希望这样,因为我在c ++视频教程中看到了它,但不明白为什么?因为构造函数是手动继承的!
答案 0 :(得分:3)
如果您尚未声明一个类,则编译器始终为该类实现一个析构函数。编译器还会生成调用基类析构函数的代码。
换句话说,基类析构函数不是继承的,而是在派生类析构函数之后被调用的。
请参见Destructor:
破坏顺序
对于用户定义或隐式定义的析构函数,在执行析构函数的主体之后,编译器将以声明的相反顺序为该类的所有非静态非变量成员调用析构函数,然后调用所有直接非虚拟基类的析构函数,其构造顺序相反(依次调用其成员及其基类的析构函数,等等),然后,如果此对象是派生程度最高的类,则将其称为析构函数所有虚拟基地。
即使直接调用析构函数(例如obj。〜Foo();),〜Foo()中的return语句也不会立即将控制权返回给调用者:它将首先调用所有那些成员和基本析构函数。
答案 1 :(得分:0)
子类继承父类的数据成员和成员函数,但私有成员在子类中仍然不可用,只有公共成员函数和数据成员在子类中是可接受的。在继承中,构造函数或析构函数不是子类继承的,而是在子类构造函数和析构函数中,有一个对基类构造函数和析构函数的显式调用。 每当我们创建子类的对象时,将首先调用基类的构造函数,然后再调用派生类的构造函数。而如果子类的对象被破坏,则将先调用子类的析构函数,然后再调用父类的析构函数被称为。