Tuan Lidström dan saya bertengkar :)
Klaim Tn. Lidström adalah bahwa sebuah konstruksi shared_ptr<Base> p(new Derived);
tidak memerlukan Base untuk memiliki penghancur virtual:
Armen Tsirunyan : "Benarkah? Akankah shared_ptr membersihkan dengan benar? Bisakah Anda dalam hal ini menunjukkan bagaimana efek tersebut dapat diterapkan?"
Daniel Lidström : "The shared_ptr menggunakan destruktornya sendiri untuk menghapus instance Concrete. Ini dikenal sebagai RAII dalam komunitas C ++. Saran saya adalah Anda mempelajari semua yang Anda bisa tentang RAII. Ini akan membuat pengkodean C ++ Anda jauh lebih mudah saat Anda menggunakan RAII dalam segala situasi. "
Armen Tsirunyan : "Saya tahu tentang RAII, dan saya juga tahu bahwa pada akhirnya destruktor shared_ptr dapat menghapus piksel yang disimpan saat pn mencapai 0. Tetapi jika px memiliki penunjuk tipe statis ke
Base
dan penunjuk jenis dinamis keDerived
, maka kecualiBase
memiliki destruktor virtual, ini akan mengakibatkan perilaku tidak jelas. Koreksi saya jika saya salah. "Daniel Lidström : "The shared_ptr tahu jenis statisnya adalah Beton. Ia tahu ini sejak saya meluluskannya di konstruktornya! Sepertinya agak ajaib, tapi saya jamin itu sesuai desain dan sangat bagus."
Jadi, nilai kami. Bagaimana mungkin (jika ada) untuk mengimplementasikan shared_ptr tanpa memerlukan kelas polimorfik untuk memiliki destruktor virtual? Terima kasih sebelumnya