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

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

Patricia Arquette
Lepaskan: 2024-12-06 06:44:12
asal
280 orang telah melayarinya

Can `shared_ptr` Work Without Virtual Destructors in Polymorphic Classes?

Petunjuk Dikongsi Bukan Polimorfik: Membongkar Rahsia

Perdebatan hangat antara Encik Lidström dan Encik Tsirunyan menimbulkan persoalan asas: adakah ia boleh dilaksanakan untuk melaksanakan shared_ptr tanpa mewajibkan pemusnah maya untuk polimorfik kelas?

En. Penegasan Lidström bahawa shared_ptr

Walau bagaimanapun, piawaian C 11 dan perpustakaan Boost menunjukkan bahawa pelaksanaan memang boleh dilakukan. Pencapaian ini dicapai melalui konsep "jenis pemadaman":

template<class T>
class shared_ptr
{
public:
   ...
   template<class Y>
   explicit shared_ptr(Y* p);
   ...
};</p>
<p>Dalam contoh yang disediakan, shared_ptr<Base><sp(new Derived);, pembina templat dengan Y=Derived mencipta dan memulakan objek shared_ptr. Yang penting, pembina ini menyimpan penuding ke blok kawalan yang mengandungi pembilang rujukan dan objek pemadam yang disesuaikan khusus untuk kelas Terbitan.</p>
<p>Apabila kiraan rujukan menurun kepada sifar, objek pemadam, bersenjatakan pengetahuannya tentang Struktur kelas terbitan, digunakan untuk melupuskan memori yang diperuntukkan.</p>
<p>Piawaian C 11 secara eksplisit menyatakan gelagat ini dalam keperluan untuk pembina:</p>
<pre class="brush:php;toolbar:false">Requires: ... The expression delete p shall be well formed, shall have well defined behaviour and shall not throw exceptions.
Effects: Constructs a shared_ptr object that owns the pointer p.
Salin selepas log masuk

Ini memastikan pemadam digunakan dengan betul dan memori dilepaskan dengan selamat, walaupun penuding dilemparkan dari Derived to Base.

Begitu juga, piawaian menggariskan tingkah laku pemusnah:

Effects: ... Otherwise, if *this owns a pointer p, and delete p is called.
Salin selepas log masuk

Oleh menggunakan pembina templat dan pemadaman jenis, shared_ptr boleh mengelakkan keperluan untuk pemusnah maya dalam kelas polimorfik, membolehkan pengurusan memori yang cekap untuk pelbagai senario yang lebih luas.

Atas ialah kandungan terperinci Bolehkah `shared_ptr` Berfungsi 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