Condividi tramite


_get_purecall_handler, _set_purecall_handler

Imposta o ottiene il gestore degli errori per una chiamata alla funzione virtuale pura.

Sintassi

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

Parametri

function
Funzione da chiamare quando si chiama una funzione virtuale pura. Una funzione _purecall_handler deve avere un tipo restituito void.

Valore restituito

_purecall_handler precedente. Restituisce nullptr se non è disponibile alcun gestore precedente.

Osservazioni:

Le funzioni _get_purecall_handler e _set_purecall_handler sono specifiche di Microsoft e si applicano solo al codice C++.

Una chiamata a una funzione virtuale pura è un errore perché non ha un'implementazione. Per impostazione predefinita, il compilatore genera codice per richiamare una funzione del gestore errori quando viene chiamata una funzione virtuale pura, che termina il programma. È possibile installare una funzione del gestore errori personalizzata per le chiamate di funzioni virtuali pure, in modo da intercettarle per il debug o la creazione di report. Per usare un gestore errori personalizzato, creare una funzione con la firma _purecall_handler e quindi usare _set_purecall_handler per impostarlo come gestore corrente.

Poiché per ogni processo è presente un _purecall_handler solo processo, quando viene chiamato _set_purecall_handler influisce immediatamente su tutti i thread. L'ultimo chiamante in qualsiasi thread imposta il gestore.

Per ripristinare il comportamento predefinito, chiamare _set_purecall_handler con un argomento nullptr.

Requisiti

Ciclo Intestazione obbligatoria
_get_purecall_handler, _set_purecall_handler <cstdlib> o <stdlib.h>

Per informazioni sulla compatibilità, vedere Compatibilità.

Esempio

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

Vedi anche

Gestione errori
_purecall