_get_purecall_handler, _set_purecall_handler

Mendapatkan atau mengatur handler kesalahan untuk panggilan fungsi virtual murni.

Sintaks

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

Parameter

function
Fungsi yang akan dipanggil ketika fungsi virtual murni dipanggil. Fungsi _purecall_handler harus memiliki jenis pengembalian yang batal.

Nilai hasil

Yang sebelumnya _purecall_handler. Mengembalikan nullptr jika tidak ada handler sebelumnya.

Keterangan

Fungsi _get_purecall_handler dan _set_purecall_handler khusus Microsoft dan hanya berlaku untuk kode C++.

Panggilan ke fungsi virtual murni adalah kesalahan karena tidak memiliki implementasi. Secara default, pengkompilasi menghasilkan kode untuk memanggil fungsi handler kesalahan ketika fungsi virtual murni dipanggil, yang mengakhiri program. Anda dapat menginstal fungsi handler kesalahan Anda sendiri untuk panggilan fungsi virtual murni, untuk menangkapnya untuk tujuan penelusuran kesalahan atau pelaporan. Untuk menggunakan handler kesalahan Anda sendiri, buat fungsi yang memiliki _purecall_handler tanda tangan, lalu gunakan _set_purecall_handler untuk menjadikannya handler saat ini.

Karena hanya ada satu _purecall_handler untuk setiap proses, ketika Anda menyebutnya _set_purecall_handler segera berdampak pada semua utas. Pemanggil terakhir pada utas apa pun mengatur handler.

Untuk memulihkan perilaku default, panggil _set_purecall_handler dengan menggunakan nullptr argumen.

Persyaratan

Rutin Header yang diperlukan
_get_purecall_handler, _set_purecall_handler <cstdlib> atau <stdlib.h>

Untuk informasi kompatibilitas, lihat Kompatibilitas.

Contoh

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

Baca juga

Penanganan kesalahan
_purecall