在程序中出现是件很烦人的事,而且这是系统产生的,会给客户造成不良影响,如果能捕获到它就好了,目前有一个好办法,如下例所示:
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
class CDerived;
class CBase
{
public:
CBase(CDerived *derived): m_pDerived(derived) {
printf("进入了CBase");
};
~CBase();
virtual void function(void) = 0;
CDerived * m_pDerived;
};
class CDerived : public CBase
{
public:
CDerived() : CBase(this) {}; // C4355
virtual void function(void) {
printf("进入了function");
};
};
CBase::~CBase()
{
m_pDerived -> function();
}
void myPurecallHandler(void)
{
printf("In _purecall_handler.");
exit(0);
}
int _tmain(int argc, _TCHAR* argv[])
{
_set_purecall_handler(myPurecallHandler);
CDerived myDerived;
myDerived.function();
CDerived *p = new CDerived;
p->function();
if (p)
{
delete p;
p = NULL;
}
getchar();
}
当调用delete时,程序就会捕捉到pure virtual fuction call这个错误,进入回调函数myPurecallHandler中,如果不调用退出函数,则程序会出现上图所示的错误,如果退出了,则不会出现对话框,使程序可以退出