共用方式為


_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