Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mencegah Ketergantungan Pekeliling Apabila Menggunakan std::shared_ptr daripada \'ini\'?

Bagaimana untuk Mencegah Ketergantungan Pekeliling Apabila Menggunakan std::shared_ptr daripada \'ini\'?

Linda Hamilton
Lepaskan: 2024-10-29 04:43:29
asal
625 orang telah melayarinya

How to Prevent Circular Dependencies When Using std::shared_ptr of

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());
}
Salin selepas log masuk

pribadi :

std::list<std::weak_ptr<B>> children;
Salin selepas log masuk

};

kelas B {
awam:

void setParent(std::shared_ptr<A> parent) {
    this->parent = parent;
}
Salin selepas log masuk

peribadi:

std::shared_ptr<A> parent;
Salin selepas log masuk

};

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!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan