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

Linda Hamilton
Lepaskan: 2024-10-29 04:43:29
asal
523 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!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!