Rumah > pembangunan bahagian belakang > C++ > Patutkah Pemusnah Maya Tulen dalam C Dilaksanakan?

Patutkah Pemusnah Maya Tulen dalam C Dilaksanakan?

Susan Sarandon
Lepaskan: 2024-12-23 15:56:11
asal
387 orang telah melayarinya

Should a Pure Virtual Destructor in C   Be Implemented?

Pemusnah Maya Tulen dalam C : Kisah Peringatan

Apabila mentakrifkan kelas asas abstrak dalam C , mungkin tergoda untuk mengisytiharkan pemusnah maya sebagai maya semata-mata, sebagai ditunjukkan dalam coretan kod di bawah:

class A {
public:
    virtual ~A() = 0;
};
Salin selepas log masuk

Sementara sintaks ini sah dalam penyusun tertentu, seperti MSVC, ia menimbulkan bahaya mengintai yang boleh membawa kepada ranap masa jalan.

Masalah: Perlaksanaan Pemusnah Hilang

Isu dengan kod di atas ialah pemusnah maya diisytiharkan menjadi murni tanpa menyediakan pelaksanaan. Ini bermakna bahawa tingkah laku pemusnah diwakilkan kepada kelas terbitan konkrit. Walau bagaimanapun, jika objek jenis A itu sendiri pernah dimusnahkan, pemusnahnya akan dipanggil, dan kekurangan pelaksanaannya akan mengakibatkan tingkah laku yang tidak ditentukan.

Potensi Akibat

Dalam senario biasa, memperoleh daripada kelas asas abstrak A dan cuba memusnahkan objek kelas terbitan akhirnya akan menggunakan pemusnah A. Tanpa pelaksanaan, ini boleh mencetuskan gelagat yang tidak ditentukan pada platform tertentu, seperti menggunakan pengendali panggilan tulen dan ranap program.

Penyelesaian: Melaksanakan Pemusnah

Untuk menyelesaikan isu ini, asas abstrak pemusnah kelas harus dilaksanakan secara eksplisit, walaupun badannya kosong. Coretan kod yang diperbetulkan di bawah menunjukkan perkara ini:

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }
Salin selepas log masuk

Dengan menyediakan pelaksanaan kosong untuk pemusnah A, anda memastikan kelakuannya ditakrifkan apabila dipanggil secara terus atau melalui kelas terbitan.

Atas ialah kandungan terperinci Patutkah Pemusnah Maya Tulen dalam C Dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan