Aracılığıyla paylaş


_get_purecall_handler, _set_purecall_handler

Saf bir sanal işlev çağrısı için hata işleyicisini alır veya ayarlar.

Sözdizimi

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

Parametreler

function
Saf bir sanal işlev çağrıldığında çağrılacak işlev. bir _purecall_handler işlevin geçersiz dönüş türü olmalıdır.

Dönüş değeri

Önceki _purecall_handler. Önceki işleyici yoksa döndürür nullptr .

Açıklamalar

ve _set_purecall_handler işlevleri Microsoft'a _get_purecall_handler özgü olup yalnızca C++ koduna uygulanır.

Saf bir sanal işleve yapılan çağrı, uygulaması olmadığından bir hatadır. Varsayılan olarak, derleyici saf bir sanal işlev çağrıldığında hata işleyici işlevini çağırmak için kod oluşturur ve bu da programı sonlandırır. Hata ayıklama veya raporlama amacıyla yakalamak üzere saf sanal işlev çağrıları için kendi hata işleyici işlevinizi yükleyebilirsiniz. Kendi hata işleyicinizi kullanmak için, imzasını _purecall_handler içeren bir işlev oluşturun, ardından bunu geçerli işleyici yapmak için kullanın _set_purecall_handler .

Her işlem için yalnızca bir tane _purecall_handler olduğundan, çağırdığınızda _set_purecall_handler tüm iş parçacıkları hemen etkilenir. Herhangi bir iş parçacığındaki son çağıran işleyiciyi ayarlar.

Varsayılan davranışı geri yüklemek için bir nullptr bağımsız değişken kullanarak çağırın_set_purecall_handler.

Gereksinimler

Yordam Gerekli başlık
_get_purecall_handler, _set_purecall_handler <cstdlib> veya <stdlib.h>

Uyumluluk bilgileri için bkz . Uyumluluk.

Örnek

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

Ayrıca bkz.

Hata işleme
_purecall