Rumah > pembangunan bahagian belakang > C++ > Bolehkah `shared_ptr` Menguruskan Objek `Derived` Tanpa Pemusnah Maya dalam `Base`?

Bolehkah `shared_ptr` Menguruskan Objek `Derived` Tanpa Pemusnah Maya dalam `Base`?

Mary-Kate Olsen
Lepaskan: 2024-12-09 20:53:10
asal
461 orang telah melayarinya

Can `shared_ptr` Manage `Derived` Objects Without a Virtual Destructor in `Base`?

Shared_Ptr dan Polimorfisme Tanpa Pemusnah Maya

Dalam perbahasan baru-baru ini, Daniel Lidström menegaskan bahawa shared_ptr dibina dengan Derived baharu tidak mewajibkan pemusnah maya dalam Base. Artikel ini menyiasat kemungkinan pelaksanaan sedemikian.

Melaksanakan Shared_Ptr Tanpa Pemusnah Maya

Kunci kepada pelaksanaan ini terletak pada pemadaman jenis. Shared_ptr menyimpan lebih daripada sekadar kaunter rujukan; ia termasuk pemadam (disimpan sebagai sebahagian daripada struktur data) yang mengendalikan pemusnahan objek. Pemadam ini boleh terdiri daripada sebarang jenis, membenarkan penyesuaian di luar skop T (jenis templat shared_ptr).

Penyesuaian untuk Kelas Terbitan

Apabila membuat shared_ptr< ;Asas> daripada objek Terbitan, pembina templat digunakan, membenarkan spesifikasi jenis Terbitan konkrit. Pembina mencipta pemadam yang diperlukan dengan pengetahuan tentang jenis dinamik, memastikan pemusnahan objek yang betul walaupun tanpa pemusnah maya dalam Pangkalan.

Contoh Pelaksanaan

template<class T>
class shared_ptr
{
public:
   ...
   template<class Y>
   explicit shared_ptr(Y* p);
   ...
};
Salin selepas log masuk

Perkara di atas pembina membenarkan penciptaan shared_ptr daripada objek Terbitan.

C 11 Keperluan Standard

Standard C 11 secara eksplisit memerlukan tingkah laku ini:

  • Pembina templat mesti memastikan bahawa ungkapan delete p mempunyai tingkah laku yang jelas, walaupun tanpa pemusnah maya dalam T.
  • Jika shared_ptr memiliki objek tanpa pemadam, ia harus memanggil padam p.

Atas ialah kandungan terperinci Bolehkah `shared_ptr` Menguruskan Objek `Derived` Tanpa Pemusnah Maya dalam `Base`?. 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