std::shared_ptr of "this": Memahami Kebergantungan Pekeliling
Mewarisi daripada std::enable_shared_from_this ialah kunci untuk menyelesaikan "std ::shared_ptr of this" teka-teki. Dengan mendayakan ini, anda boleh menggunakan .shared_from_this() untuk mendapatkan penuding dikongsi ke objek semasa. Walau bagaimanapun, ini memperkenalkan potensi pergantungan bulat antara objek ibu bapa dan anak.
Untuk menangani isu ini, disyorkan untuk menggunakan std::weak_ptr untuk rujukan anak kepada ibu bapa. Ini menghalang pembentukan rujukan bulat yang kuat dan melindungi daripada kebocoran sumber. Kod yang diubah suai menunjukkan cara untuk melaksanakan pendekatan ini:
<br>kelas A : public std::enable_shared_from_this<a> {<br>awam:</a></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); }
pribadi :
std::list<std::weak_ptr<B>> children;
};
kelas B {
awam:
void setParent(std::shared_ptr<A> parent) { this->parent = parent; }
peribadi:
std::shared_ptr<A> parent;
};
Adalah penting untuk ambil perhatian bahawa memanggil .shared_from_this() memerlukan objek semasa diurus oleh std::shared_ptr pada masa panggilan. Ini menunjukkan bahawa mencipta objek sedemikian pada tindanan tidak lagi boleh dilakukan dan memanggil .shared_from_this() daripada pembina atau pemusnah biasanya tidak disyorkan.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Ketergantungan Pekeliling Apabila Menggunakan std::shared_ptr daripada \'ini\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!