谁能帮帮忙,当我使用虚拟函数时,销毁的顺序是什么?它是从基类开始,然后是派生类吗?
发布于 2010-08-18 05:43:56
由于我看不到虚拟函数如何更改任何对象的销毁顺序,因此我假设您指的是虚拟继承场景中基类和数据成员的销毁顺序。
子对象是由构造的
顺序,在执行封闭对象的构造函数主体之前构造成员
销毁是与构造相反的,所以你只需要记住上面的内容。
然而,上面的四个规则是按这个顺序排列的,因为这是有意义的,如果你理解了为什么这个顺序是有意义的,你甚至不需要记住这四个规则,但可以从你的理解中推断出它们(就像我刚刚做的那样)。因此,让我们检查一下该顺序:
发布于 2010-08-18 05:32:19
销毁顺序是反向的构造顺序。我最近做了一个小工具来显示任何层次结构的构造顺序。看这里:
在图中,具有较小数量的节点被构造为first和destructed last。
发布于 2010-08-18 17:19:57
第12.6.2/5节:
初始化应按以下顺序进行:
首先,并且仅对于如下所述的最多派生类的构造函数,虚拟基类应该按照它们在基类的有向无循环图的深度优先从左向右遍历时出现的顺序来初始化,其中,“从左到右”是派生类中基类名称的出现顺序base-specifier-list.
注意:声明顺序是为了确保基对象和成员子对象以与初始化相反的顺序被销毁。
https://stackoverflow.com/questions/3507100
复制相似问题