C ++中的纯虚函数调用

时间:2013-12-23 08:41:31

标签: c++ gcc pure-virtual

我的应用程序崩溃,并显示消息“称为纯虚函数”。我删除了所有纯虚函数并给了它们一个实现ASSERT(false);...所以它至少应该告诉我崩溃的位置。并且,它没有。所以必须有另一个具有虚函数的位置,对吗?

如何在不使用调试器的情况下调试它?

1 个答案:

答案 0 :(得分:4)

我碰巧遇到的纯虚函数调用的最常见原因是:

  • 在销毁这些对象时调用对象上的虚函数。
  • 仅复制基类(对象切片)后调用对象上的虚函数

如果你不想或不能调试,你应该至少放一些trace / log来查找发生的时间/发生的事情。我建议你在一些对象的析构函数中加入一些痕迹。

当销毁派生对象时,虚拟表不再指向派生成员函数。 如果你在对象的剩余接口上调用一个函数,那么你可以进行纯函数调用,因为派生的对象不再存在,只剩下它的超类。