_get_purecall_handler_set_purecall_handler

获取或设置纯虚函数调用的错误处理程序。

语法

typedef void (__cdecl* _purecall_handler)(void);
_purecall_handler __cdecl _get_purecall_handler(void);
_purecall_handler __cdecl _set_purecall_handler(
   _purecall_handler function
);

参数

function
要在调用纯虚函数时调用的函数。 _purecall_handler 函数必须具有 void 返回类型。

返回值

之前的 _purecall_handler。 如果之前的处理程序不存在,则返回 nullptr

备注

_get_purecall_handler_set_purecall_handler 函数特定于 Microsoft 且仅适用于 C++ 代码。

对纯虚拟函数的调用出错,因为它没有实现。 默认情况下,在调用纯虚函数时,编译器将生成代码来调用错误处理程序函数,这将终止该程序。 可以安装自己的错误处理程序进行纯虚拟函数调用,以捕获这些调用用于调试和报告目的。 若要使用自己的错误处理程序,请创建一个具有 _purecall_handler 签名的函数,然后使用 _set_purecall_handler 使其成为当前处理程序。

因为每个进程只有一个 _purecall_handler,在调用 _set_purecall_handler 时,它立即会影响所有线程。 任一线程上的最后一个调用方将设置该处理程序。

若要还原默认行为,请使用 nullptr 参数调用 _set_purecall_handler

要求

例程 必需的标头
_get_purecall_handler_set_purecall_handler <cstdlib> 或 <stdlib.h>

有关兼容性信息,请参阅兼容性

示例

// _set_purecall_handler.cpp
// compile with: /W1
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>

class CDerived;
class CBase
{
public:
   CBase(CDerived *derived): m_pDerived(derived) {};
   ~CBase();
   virtual void function(void) = 0;

   CDerived * m_pDerived;
};

class CDerived : public CBase
{
public:
   CDerived() : CBase(this) {};   // C4355
   virtual void function(void) {};
};

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;
}
In _purecall_handler.

另请参阅

错误处理
_purecall