Apakah salah menulis:
class A {
public:
virtual ~A() = 0;
};
untuk kelas dasar abstrak?
Setidaknya itu mengkompilasi di MSVC ... Apakah akan crash pada saat dijalankan?
c++
polymorphism
destructor
pure-virtual
Ivan Krechetov
sumber
sumber
Jawaban:
Iya. Anda juga perlu mengimplementasikan destructor:
harus cukup.
Dan karena ini mendapat suara turun, saya harus mengklarifikasi: Jika Anda memperoleh sesuatu dari A dan kemudian mencoba untuk menghapus atau menghancurkannya,
A
destructor akhirnya akan dipanggil. Karena murni dan tidak memiliki implementasi, perilaku yang tidak terdefinisi akan terjadi. Pada satu platform populer, itu akan memanggil purecall handler dan crash.Sunting: memperbaiki deklarasi agar lebih selaras, dikompilasi dengan http://www.comeaucomputing.com/tryitout/
sumber
Penghancur pribadi: mereka akan memberi Anda kesalahan ketika Anda membuat objek dari kelas turunan - bukan sebaliknya. Diagnosis mungkin muncul.
Kelas dengan destruktor virtual murni adalah kelas abstrak. Catat dengan baik:
Diambil langsung dari konsep:
sumber