_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.