_get_purecall_handler
, _set_purecall_handler
Obtient ou définit le gestionnaire d’erreurs pour un appel de fonction virtuelle pure.
Syntaxe
typedef void (__cdecl* _purecall_handler)(void);
_purecall_handler __cdecl _get_purecall_handler(void);
_purecall_handler __cdecl _set_purecall_handler(
_purecall_handler function
);
Paramètres
function
Fonction à appeler quand une fonction virtuelle pure est appelée. Une fonction _purecall_handler
doit avoir un type de retour void.
Valeur retournée
_purecall_handler
précédent. Retourne nullptr
s'il n'existait pas de gestionnaire précédemment.
Notes
Les fonctions _get_purecall_handler
et _set_purecall_handler
sont des fonctions fournies par Microsoft et s’appliquent uniquement au code C++.
Un appel à une fonction virtuelle pure est une erreur, car elle n’a pas d’implémentation. Par défaut, le compilateur génère du code pour appeler une fonction de gestionnaire d’erreurs quand une fonction virtuelle pure est appelée, ce qui met fin au programme. Vous pouvez installer votre propre fonction de gestionnaire d’erreurs pour les appels de fonction virtuelle pure, pour les intercepter à des fins de débogage ou de création de rapports. Pour utiliser votre propre gestionnaire d’erreurs, créez une fonction qui a la signature _purecall_handler
, puis utilisez _set_purecall_handler
afin d’en faire le gestionnaire actuel.
Étant donné qu’il n’y en a qu’un _purecall_handler
seul pour chaque processus, lorsque vous l’appelez _set_purecall_handler
immédiatement impacte tous les threads. Le dernier appelant au niveau d'un thread est celui qui définit le gestionnaire.
Pour rétablir le comportement par défaut, appelez _set_purecall_handler
à l’aide d’un argument nullptr
.
Spécifications
Routine | En-tête requis |
---|---|
_get_purecall_handler , _set_purecall_handler |
<cstdlib> ou <stdlib.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibilité.
Exemple
// _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.