Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Berkongsi Rujukan dengan Selamat kepada \'ini\' dengan Objek Kanak-kanak Menggunakan `std::shared_ptr`?
std::shared_ptr of "this" Conundrum
Dalam bidang petunjuk pintar, anda mungkin menghadapi senario di mana objek kelas A, ibu bapa, perlu berkongsi rujukan kepada dirinya sendiri dengan anaknya, objek kelas B. Walau bagaimanapun, menghantar penunjuk mudah kepada "ini" boleh mengakibatkan ralat yang tidak masuk akal.
Penyelesaian terletak pada teka-teki yang membingungkan std::enable_shared_from_this tool. Mewarisi daripada kelas ini memberi kuasa kepada anda untuk mengakses .shared_from_this() dalam kelas, memberikan anda pemilikan bersama objek semasa.
Walau bagaimanapun, kaveat penting muncul daripada kesalinghubungan ini: potensi untuk kebergantungan bulat. Untuk mengelakkan masalah kebocoran sumber, adalah bijak untuk memperkenalkan std::weak_ptr apabila mencipta kebergantungan sedemikian.
Mengikut pendekatan yang disemak ini, kod anda yang disemak mungkin menyerupai yang berikut:
<code class="cpp">class A : public std::enable_shared_from_this<A> { public: void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); // Corrected reference passing } private: std::list<std::weak_ptr<B>> children; // Using weak_ptr to prevent circular references }; class B { public: void setParent(std::shared_ptr<A> parent) { this->parent = parent; } private: std::shared_ptr<A> parent; };</code>
Perlu diingat bahawa memanggil .shared_from_this() memerlukan pemilikan objek oleh std::shared_ptr pada masa seruan. Ini menghapuskan kemungkinan objek yang diperuntukkan tindanan dan secara amnya mengehadkan panggilan ke .shared_from_this() daripada dalam pembina atau pemusnah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berkongsi Rujukan dengan Selamat kepada \'ini\' dengan Objek Kanak-kanak Menggunakan `std::shared_ptr`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!