Dalam penggunaan penunjuk pintar, selalunya senario timbul di mana dua objek berkaitan, A dan B, memerlukan akses kepada antara satu sama lain. Walau bagaimanapun, melepasi std::shared_ptr untuk mewujudkan sambungan ini menjadi mencabar.
Sebagai contoh, pertimbangkan kelas A, induk, yang perlu menambah objek anak B. Kaedah addChild ibu bapa sepatutnya lulus std:: shared_ptr kepada anak, jadi ia boleh merujuk ibu bapa.
Walau bagaimanapun, percubaan anak langsung->setParent(ini) gagal kerana penunjuk ini adalah rnilai. Untuk menyelesaikan masalah ini, C menawarkan std::enable_shared_from_this.
std::enable_shared_from_this ialah templat kelas yang memudahkan perkongsian objek melalui std_ptr:.:share Dengan mewarisi daripadanya, anda mendapat akses kepada shared_from_this(), yang menyediakan std::shared_ptr yang diperlukan, seperti yang dilihat dalam kod yang diubah suai:
<code class="cpp">class A : public std::enable_shared_from_this<A> { ... child->setParent(shared_from_this()); // now valid };</code>
Selain itu, untuk mengelakkan kebergantungan bulat yang boleh membawa kepada kebocoran memori , dinasihatkan menggunakan std::weak_ptr untuk kanak-kanak yang bergantung pada kewujudan ibu bapa mereka:
<code class="cpp">std::list<std::weak_ptr<B>> children; // now using weak_ptr</code>
Perlu ambil perhatian bahawa .shared_from_this() hanya perlu dipanggil semasa panggilan objek diurus oleh std::shared_ptr. Ini bermakna ia tidak boleh dibuat pada tindanan dan biasanya tidak boleh dipanggil dalam pembina atau pemusnah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati `std::shared_ptr` `this` dengan Selamat kepada Objek Berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!