Rumah > Artikel > pembangunan bahagian belakang > Mengapa Ralat "Panggilan Fungsi Maya Tulen" Berlaku dalam Pembina dan Pemusnah?
Menyingkap Enigma Ranap "Panggilan Fungsi Maya Tulen"
Dalam bidang pengaturcaraan, menghadapi ranap 伴随着 "panggilan fungsi maya tulen " ralat boleh membingungkan, menyebabkan pembangun menggaru kepala mereka. Artikel ini bertujuan untuk menjelaskan punca di sebalik ralat yang sukar difahami ini.
Sifat Abstrak Fungsi Maya Tulen
Fungsi maya tulen adalah aspek asas objek- pengaturcaraan berorientasikan, membolehkan pengisytiharan fungsi dalam kelas abstrak yang mesti dilaksanakan dalam kelas terbitan. Dengan reka bentuk, fungsi maya tulen tidak mempunyai pelaksanaan dalam kelas abstrak.
The Culprit: Constructor and Destructor Calls
Namun, masalah timbul apabila panggilan fungsi maya dicuba dari dalam pembina atau pemusnah. Dalam kes sedemikian, had yang wujud akan dimainkan: panggilan fungsi maya semasa pemulaan objek atau pemusnahan tidak dibenarkan. Sebab di sebalik sekatan ini terletak pada keadaan tidak lengkap objek kelas terbitan semasa fasa kewujudannya.
Seruan Kelas Asas
Sebagai akibat daripada larangan ini, panggilan fungsi maya daripada pembina atau pemusnah menghasilkan pemanggilan versi kelas asas bagi fungsi tersebut. Ini menimbulkan masalah jika fungsi maya tulen tidak mempunyai pelaksanaan kelas asas, yang selalunya berlaku dalam kelas abstrak.
Contoh Ilustrasi
Untuk menggambarkan isu ini, pertimbangkan kod C berikut:
class Base { public: Base() { reallyDoIt(); } void reallyDoIt() { doIt(); } // DON'T DO THIS virtual void doIt() = 0; }; class Derived : public Base { void doIt() {} }; int main() { Derived d; // Triggers "pure virtual function call" error }
Dalam contoh ini, fungsi reallyDoIt() dalam kelas Base memanggil doIt() fungsi. Walau bagaimanapun, kerana doIt() ialah fungsi maya tulen, kelas asas tidak mempunyai pelaksanaan untuknya. Akibatnya, apabila objek kelas Terhasil dicipta, ia cuba memanggil fungsi doIt() daripada pembina, membawa kepada ralat "panggilan fungsi maya tulen" yang ditakuti.
Sumber Tambahan
Untuk menyelami topik ini dengan lebih mendalam, sila rujuk artikel bernas oleh Raymond Chen di subjek:
Atas ialah kandungan terperinci Mengapa Ralat "Panggilan Fungsi Maya Tulen" Berlaku dalam Pembina dan Pemusnah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!