_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
を使って作成した関数を現在のハンドラーにします。
プロセスごとに 1 つの _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.