Compartir a través de


_get_purecall_handler, _set_purecall_handler

Obtiene o establece el controlador de errores de una llamada de función virtual pura.

Sintaxis

typedef void (__cdecl* _purecall_handler)(void);
_purecall_handler __cdecl _get_purecall_handler(void);
_purecall_handler __cdecl _set_purecall_handler(
   _purecall_handler function
);

Parámetros

function
Función a la que se llamará cuando se llame a una función virtual pura. Una función _purecall_handler debe tener un tipo de valor devuelto void.

Valor devuelto

_purecall_handler anterior. Devuelve nullptr si no había controlador anterior.

Comentarios

Las funciones _get_purecall_handler y _set_purecall_handler son específicas de Microsoft y solo se aplican a código de C++.

Una llamada a una función virtual pura es un error, porque no tiene ninguna implementación. De forma predeterminada, el compilador genera código que invoca a una función de controlador de errores cuando se llama a una función virtual pura, lo que finaliza el programa. Puede instalar su propia función de controlador de errores para llamadas de función virtual pura, para capturarlas con fines informativos o de depuración. Para usar su propio controlador de errores, cree una función que tenga la signatura _purecall_handler; luego use _set_purecall_handler para convertirlo en el controlador actual.

Dado que solo hay uno _purecall_handler para cada proceso, cuando se llama _set_purecall_handler inmediatamente afecta a todos los subprocesos. El último que llama en cualquiera de los subprocesos establece el controlador.

Para restaurar el comportamiento predeterminado, llame a _set_purecall_handler mediante un argumento nullptr.

Requisitos

Routine Encabezado necesario
_get_purecall_handler, _set_purecall_handler <cstdlib> o <stdlib.h>

Para obtener información sobre la compatibilidad, consulte Compatibilidad.

Ejemplo

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

Vea también

Control de errores
_purecall