C++ 继承层次结构中的析构函数排序
如果我具有以下层次结构:C++ 继承层次结构中的析构函数排序,c++,inheritance,polymorphism,virtual-destructor,C++,Inheritance,Polymorphism,Virtual Destructor,如果我具有以下层次结构: 类F包含类型的成员对象(类E和类D,按该顺序声明) 类F继承了具体的类C 类C继承抽象/纯虚拟类B 类B继承了具体的类A 如果调用类型为F的对象的析构函数,则以下顺序发生: 类F(最派生的)析构函数被调用并完成 类D(成员对象2)析构函数被调用并完成 类E(成员对象1)析构函数被调用并完成 类C(F的基)析构函数被调用并完成 类A(B的基,C的基)析构函数被调用并完成 类B(虚拟,C的基)析构函数被调用并完成 这是正确的吗?所以基本上在接近尾声时,C继承了虚B,虚B
- 类F包含类型的成员对象(类E和类D,按该顺序声明)
- 类F继承了具体的类C
- 类C继承抽象/纯虚拟类B
- 类B继承了具体的类A
这就是我想要理解的?析构函数以与构造函数相反的顺序执行。这几乎是你需要知道的全部
更新:它甚至适用于虚拟基地。您只需认识到,虚拟基类是在任何其他基类之前构造的。析构函数的执行顺序与构造函数的执行顺序相反。这几乎是你需要知道的全部
更新:它甚至适用于虚拟基地。您只需认识到,虚拟基是在任何其他基类之前构造的。也许将析构函数调用的顺序表示为算法是最简单的 毁灭
F::~F(){Do_this;Do_this;}
幸运的是,您不需要它,因为您只有一个。也许将析构函数调用的顺序表示为算法是最简单的 毁灭
F::~F(){Do_this;Do_this;}
幸运的是,你不需要这个,因为你只有一个。< /P>是的,但是我读到了虚拟类的析构函数在结尾被调用,不管它们在层次结构中的位置是什么?C++ 272个FAQ,第三页说“虚拟基类是特殊的——它们的析构函数在最派生类的构造函数的结尾被调用”。那么在我的示例中,这是否意味着紧跟在类F之后?@user997112:您真的应该添加代码,而不是描述层次结构是什么。。。你真的在使用
virtual
继承吗?这在描述中并不清楚。请用真实的代码更新这个问题。@ DavidRodr的Guez Dr.DeBeas,我没有代码,我试图理解C++ FAQ引用的含义。@ USER 99 7112:不清楚你的意思是抽象的/纯的虚拟类,我认为你理解你所写的,只需使用基本C++来布局代码……是的,但是我读到了虚拟类的析构函数在结尾被调用,不管它们在层次结构中的位置是什么?C++ 272个常见问题解答,第三页说“虚拟基类是特殊的——它们的析构函数在最派生类的构造函数的结尾被调用”。那么在我的示例中,这是否意味着紧跟在类F之后?@user997112:您真的应该添加代码,而不是描述层次结构是什么。。。你真的在使用virtual
继承吗?这在描述中并不清楚。请用真实的代码更新这个问题。@ DavidRodr的Guez Dr.DeBeas,我没有代码,我试图理解C++ FAQ引用的含义。@ USER 99 7112:不清楚你的意思是抽象的/纯的虚拟类,我认为你理解你所写的,只需使用基本C++来布局代码……描述就有点混乱:它不是虚拟的类,而是继承。所以你的类C实际上继承了类B,或者你可以说B是C的一个虚拟基。当然,B是抽象的,它包含纯虚函数,但是构造函数/析构函数的顺序并不重要。@anatolyg那么你会如何重新编写C++常见问题解答,因为我完全被它说的话弄糊涂了?描述有点混乱:它不是一个虚拟类,而是继承。所以你的类C实际上继承了类B,或者你可以说B是C的一个虚拟基。当然,B是抽象的,它包含纯虚拟函数,但它与构造函数/析构函数的顺序无关。@anatolyg那么你会如何重新命名C++常见问题,因为我完全被我所说的混淆了