Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.