Mentakrifkan Pemusnah Maya Tulen dalam C : Membongkar Perangkap
Konsep pemusnah maya tulen dalam C menimbulkan persoalan penting mengenai pelaksanaan yang betul untuk kelas asas abstrak. Pertimbangkan coretan kod berikut:
class A { public: virtual ~A() = 0; };
Timbul persoalan sama ada pendekatan ini sesuai untuk mentakrifkan kelas asas abstrak. Walaupun ia berjaya menyusun dalam MSVC, wujud kebimbangan bahawa ia mungkin mengakibatkan ranap masa jalan.
Menyingkap Masalah
Isu ini berpunca daripada kekurangan pelaksanaan untuk maya tulen pemusnah. Apabila kelas terbitan dicipta daripada A, pemusnah mereka akhirnya akan menggunakan pemusnah A. Walau bagaimanapun, memandangkan pemusnah A adalah tulen, panggilan akan menghasilkan tingkah laku yang tidak ditentukan.
Menyelesaikan Perangkap
Untuk mengelakkan ranap masa jalan ini, adalah penting untuk melaksanakan pemusnah dalam kelas asas itu sendiri. Pelaksanaan sebaris yang mudah, seperti yang ditunjukkan di bawah, sudah memadai:
class A { public: virtual ~A() = 0; }; inline A::~A() { }
Pelaksanaan ini memastikan bahawa apabila mana-mana kelas terbitan dipadamkan atau dimusnahkan, pemusnah A akan dipanggil dan program akan berfungsi seperti yang diharapkan.
Atas ialah kandungan terperinci Perlukah Pemusnah Maya Tulen dalam C Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!