gpt4 book ai didi

c++ - 从析构函数体内部或外部调用叶类的成员函数有区别吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:10 25 4
gpt4 key购买 nike

我有一个很难在此处的代码片段中隔离的特定案例,但我可以解释它...

我有一个类 A:public B,A 有一个 foo * f 类型的成员指针。在 A 的虚拟析构函数中,我有类似的东西:

A::~A() { shutdown(); }

其中,shutdown 是非虚拟的,类似于:void A::shutdown() {删除 f;}

事实证明,在运行时这给了我一个“调用终止的纯虚拟方法,调用时没有事件异常中止(核心转储)”但是如果我从析构函数的主体中删除 shutdown() 并直接调用它,然后让析构函数运行...我不再明白...

什么可能导致这种行为?我试过使用 gdb,但它很大,我什至不确定要寻找什么。任何想法将不胜感激!

最佳答案

shutdown 要么是继承树上某处的纯虚函数,要么调用继承树上某处的另一个纯虚函数成员函数。直接或间接,但这就是发生的事情。

检查执行路径以查看调用的位置并将其删除。

关于c++ - 从析构函数体内部或外部调用叶类的成员函数有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com