1

我有一个很难在代码片段中隔离的具体案例,但我可以解释一下......

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

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

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

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

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

4

2 回答 2

0

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

检查执行路径以查看调用的位置并摆脱它。

于 2011-09-29T01:18:25.367 回答
0

如果 A 同时具有关闭方法和指针 f,则根本不要调用 shutdown()。直接在析构函数中删除 f 即可。

于 2011-09-29T01:56:13.273 回答