次の方法で共有


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

関連項目

エラー処理
_purecall