_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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk