Rumah > pembangunan bahagian belakang > C++ > Bolehkah `shared_ptr` Berfungsi dengan Betul Tanpa Pemusnah Maya dalam Kelas Polimorfik?

Bolehkah `shared_ptr` Berfungsi dengan Betul Tanpa Pemusnah Maya dalam Kelas Polimorfik?

Susan Sarandon
Lepaskan: 2024-12-08 13:50:10
asal
721 orang telah melayarinya

Can `shared_ptr` Function Correctly Without Virtual Destructors in Polymorphic Classes?

Pelaksanaan shared_ptr tanpa Pemusnah Maya

Dalam perbahasan kami, kami mempersoalkan keperluan menghendaki kelas polimorfik mempunyai pemusnah maya untuk pelaksanaan shared_ptr. Hujah yang dikemukakan mendakwa shared_ptr boleh berfungsi dengan betul tanpa keperluan ini.

Mari kita mendalami pelaksanaan shared_ptr untuk menentukan kesahihan tuntutan ini.

Taip Pemadaman dan Pembina Templat

shared_ptr menggunakan pemadam jenis untuk menyimpan pemadam dalam blok memori yang sama dengan kaunter rujukannya. Jenis pemadam ini bukan sebahagian daripada jenis shared_ptr. Dengan menggunakan pembina templat, shared_ptr boleh menampung pelbagai jenis pemadam berdasarkan kelas tertentu yang diuruskan.

Pembina berikut boleh ditakrifkan untuk mengendalikan ini:

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

Apabila menggunakan pembina ini dengan kelas Base dan Derived, pemadam yang sesuai boleh dibuat dan disimpan. Pemadam ini akan digunakan apabila kaunter rujukan menurun kepada sifar, memastikan pelupusan objek yang betul.

Keperluan Standard C 11

Piawaian C 11 secara eksplisit memerlukan tingkah laku ini untuk pembina templat:

"Kesan: Membina objek shared_ptr yang memiliki penunjuk p."

Ini mengesahkan bahawa shared_ptr mengambil alih pemilikan penunjuk yang diluluskan dan bertanggungjawab ke atas pemusnahannya.

Fungsi Pemusnah

Tingkah laku pemusnah ditakrifkan seperti berikut:

"Kesan: Jika ini memiliki objek p dan pemadam d, d(p) dipanggil, jika ini memiliki penunjuk p, dan padam p dipanggil."

Ini menunjukkan bahawa jika shared_ptr. secara langsung menguruskan penunjuk (iaitu, tanpa pemadam eksplisit), pemadaman pemusnah lalai digunakan untuk melupuskan objek.

Kesimpulan

Berdasarkan garis panduan ini, adalah jelas bahawa shared_ptr boleh dilaksanakan tanpa memerlukan kelas polimorfik mempunyai pemusnah maya. Teknik yang dinyatakan di atas, seperti pemadaman jenis dan pembina templat, membolehkan shared_ptr mengurus objek dari sebarang jenis dengan berkesan, termasuk objek yang tidak menyokong polimorfisme.

Atas ialah kandungan terperinci Bolehkah `shared_ptr` Berfungsi dengan Betul Tanpa Pemusnah Maya dalam Kelas Polimorfik?. 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