Memahami Pemusnah Maya dan Kepentingan Mereka untuk Kelas Abstrak
Pemusnah maya biasanya diiktiraf sebagai amalan terbaik untuk kelas asas dalam C . Walau bagaimanapun, kepentingannya melangkaui kelas biasa untuk merangkumi kelas abstrak yang berfungsi sebagai antara muka. Artikel ini bertujuan untuk menjelaskan kepentingan mengisytiharkan pemusnah maya untuk kelas abstrak dan memberikan contoh untuk menggambarkan akibat pengabaian amalan ini.
Kepentingan Pemusnah Maya untuk Kelas Abstrak
Isytiharkan pemusnah maya untuk kelas abstrak adalah penting kerana pengguna akhir sering memegang penunjuk kepada antara muka dan bukannya pelaksanaan konkrit. Apabila memadamkan penunjuk sedemikian, pemusnah bukan maya boleh mengakibatkan tingkah laku yang tidak ditentukan, menyerahkan tanggungjawab kepada pengkompil.
Contoh Ilustrasi
Pertimbangkan coretan kod berikut:
class Interface { virtual void doSomething() = 0; }; class Derived : public Interface { Derived(); ~Derived() { // Do some important cleanup... } }; void myFunc(void) { Interface* p = new Derived(); // Behavior undefined: calls Interface::~Interface (memory leak) or crashes delete p; }
Dalam contoh ini, fungsi myFunc mencipta contoh kelas Terbitan melalui penunjuk Antara Muka p. Memadamkan penunjuk ini menggunakan pemusnah bukan maya (padam p) boleh mempamerkan tingkah laku yang tidak ditentukan. Khususnya:
Pemusnah maya memastikan bahawa pemusnah yang sesuai dipanggil untuk jenis konkrit yang ditunjukkan oleh p, menyelesaikan kekaburan ini dan memastikan pembersihan dan pengurusan sumber yang betul.
Atas ialah kandungan terperinci Mengapa Pemusnah Maya Penting untuk Kelas Abstrak dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!