C++规则:
C++编译器禁止构造有纯虚函数的类对象,所以出现这类错误一定不是有纯虚函数的存在。
原因分析如下:
1、对象析构顺序:派生类--》基类。
2、所以如果在基类的析构函数中调用派生类重写的函数,就会发生这样的Pure Virtual Function Call错误。
举例:
多线程程序设计中,基类通过"模板方法"创建一套程序框架,同时基类在析构函数中结束所有线程
这就存在以下隐患:
派生类重写的线程执行函数(虚函数),已经析构;但是基类的析构函数中线程才结束,就会触发这个运行时错误:Pure Virtual Function Call。
解决办法:
禁止在析构函数中调用虚函数。
多线程程序尤为注意:一定要给出结束线程的函数,如QuitThread等函数接口。并要求派生类主动结束线程。