다음을 통해 공유


_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_handlernullptr을 반환합니다.

설명

_get_purecall_handler_set_purecall_handler 함수는 Microsoft 전용이고 C++ 코드에만 적용됩니다.

순수 가상 함수에 대한 호출은 구현이 없으므로 오류입니다. 기본적으로 순수 가상 함수를 호출하면 컴파일러는 오류 처리기 함수를 호출하는 코드를 생성하므로 프로그램이 종료됩니다. 순수 가상 함수 호출을 위해 고유한 오류 처리기 함수를 설치하여 디버깅 또는 보고용으로 이러한 호출을 catch할 수 있습니다. 고유한 오류 처리기를 사용하려면 _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