Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `std::shared_ptr` Mengekalkan Gelagat Pemusnahan Objek Walaupun Jenis Pemadaman?
std::shared_ptr
Siasatan berkisar pada fungsi yang membingungkan std::shared_ptr
<code class="cpp">#include <memory> #include <iostream> #include <vector> int main() { std::cout << "At begin of main.\ncreating std::vector<std::shared_ptr<void>>" << std::endl; std::vector<std::shared_ptr<void>> v; { std::cout << "Creating test" << std::endl; v.push_back(std::shared_ptr<test>(new test())); std::cout << "Leaving scope" << std::endl; } std::cout << "Leaving main" << std::endl; return 0; }</code>
Kod tersebut menunjukkan output berikut:
At begin of main. creating std::vector<std::shared_ptr<void>> Creating test Test created Leaving scope Leaving main Test destroyed
Memahami Pemadaman Jenis
Kunci kepada tingkah laku ini terletak pada pemadaman jenis yang dilakukan oleh std::shared_ptr. Apabila memulakan kejadian baharu, std::shared_ptr menyimpan fungsi pemadam dalaman. Fungsi ini, secara lalai, memanggil pengendali padam selepas pemusnahan shared_ptr. Mekanisme ini memastikan bahawa pemusnah objek yang ditunjuk dipanggil pada masa yang sesuai, tanpa mengira jenis shared_ptr.
Akibat Casting
Membuat std ::shared_ptr
Pematuhan Standard dan Implikasi Masa Depan
Mengenai gelagat terjamin teknik ini, adalah penting untuk ambil perhatian bahawa pelaksanaan dalaman std::shared_ptr mungkin berbeza-beza merentas penyusun dan platform yang berbeza. Walaupun pemadaman jenis telah menjadi aspek asas shared_ptrs, perubahan masa hadapan pada pelaksanaannya mungkin berpotensi memberi kesan kepada fungsi yang diterangkan.
Oleh itu, bergantung semata-mata pada gelagat ini bukanlah amalan yang disyorkan dan harus dielakkan dalam kod pengeluaran. Sebaliknya, pendekatan alternatif, seperti menggunakan std::function atau kelas pemadam tersuai, adalah lebih teguh dan akan memberikan gelagat yang konsisten merentas pelbagai pelaksanaan.
Atas ialah kandungan terperinci Bagaimanakah `std::shared_ptr` Mengekalkan Gelagat Pemusnahan Objek Walaupun Jenis Pemadaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!