Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah `std::shared_ptr` Mengekalkan Fungsi Pemusnah Walaupun Jenis Pemadaman?

Bagaimanakah `std::shared_ptr` Mengekalkan Fungsi Pemusnah Walaupun Jenis Pemadaman?

Barbara Streisand
Barbara Streisandasal
2024-10-31 02:57:02540semak imbas

How Does `std::shared_ptr` Maintain Destructor Functionality Despite Type Erasure?

Jenis Pemadaman dan Kefungsian std::shared_ptr

Apabila bekerja dengan kelas std::shared_ptr diperhatikan, ia biasanya diperhatikan bahawa std::shared_ptr berkelakuan dengan cara yang mengejutkan lagi berfungsi. Fenomena ini berpunca daripada konsep asas pemadaman jenis yang digunakan oleh std::shared_ptr.

Jenis Pemadaman dan Invokasi Pemusnah

std::shared_ptr menggunakan pemadaman jenis dengan menyimpan secara dalaman fungsi pemadam yang digunakan apabila penunjuk dimusnahkan. Fungsi ini bertanggungjawab untuk mendelokasi memori yang ditunjuk oleh penuding yang dikongsi. Yang penting, fungsi pemadam adalah khusus jenis, bermakna ia tahu cara memusnahkan objek jenis tertentu.

std::shared_ptr dan Taip Pemadaman

Menghantar std::shared_ptr kepada std::shared_ptr tidak mengalih keluar fungsi pemadam khusus jenis. Pemadam kekal dikaitkan dengan penuding dikongsi dan masih akan digunakan apabila dimusnahkan, walaupun maklumat jenis eksplisit telah dipadamkan. Ini kerana fungsi pemadam disimpan secara berasingan daripada objek yang ditunjuk dan tidak dipengaruhi oleh penukaran jenis.

Akibat untuk Invocation Destructor

Apabila std: :shared_ptr dimusnahkan, fungsi pemadam tersimpan digunakan. Jika pemadam sebelum ini dikaitkan dengan std::shared_ptr, ia masih akan cuba memusnahkan objek yang ditunjuk menggunakan pemusnah untuk jenis T. Inilah sebabnya mengapa kod yang mengisi std::vector> dengan std::shared_ptr objek masih akan memanggil pemusnah untuk ujian.

Gelagat Dijamin oleh Piawaian

Walaupun tingkah laku semasa std::shared_ptr dalam hal ini tidak dinyatakan secara eksplisit oleh C standard, ia diandaikan secara meluas sebagai kesan sampingan daripada pelaksanaan pemadaman jenis yang digunakan oleh penyusun yang paling biasa. Walau bagaimanapun, perubahan masa hadapan kepada pelaksanaan dalaman std::shared_ptr berpotensi memecahkan kod yang bergantung pada tingkah laku ini. Oleh itu, tidak disyorkan untuk bergantung pada kefungsian std::shared_ptr kerana ia tidak dijamin oleh standard.

Atas ialah kandungan terperinci Bagaimanakah `std::shared_ptr` Mengekalkan Fungsi Pemusnah Walaupun Jenis Pemadaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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