Se recomienda usar Visual Studio 2017

_get_purecall_handler, _set_purecall_handler

 

Publicado: octubre de 2016

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

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

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.

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

El _get_purecall_handler y _set_purecall_handler funciones son específicas de Microsoft y se aplican sólo 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 para invocar una función de controlador de error cuando se llama a una función virtual pura, que finaliza el programa. Puede instalar su propia función de controlador de errores para las llamadas de función virtual pura, contagiarse para depurar o con fines informativos. Para utilizar su propio controlador de errores, cree una función que tiene el _purecall_handler firma, a continuación, utilice _set_purecall_handler para que sea el controlador actual.

Dado que solo hay un _purecall_handler para cada proceso, al llamar a _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 utilizando un nullptr argumento.

RutinaEncabezado necesario
_get_purecall_handler, _set_purecall_handler<>>o<stdlib.h></stdlib.h>

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

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

Control de errores
_purecall

Mostrar: