Cara Menggunakan std::shared_ptr untuk Lulus Rujukan "ini"
Dalam pengaturcaraan berorientasikan objek, ia adalah perkara biasa untuk objek untuk mengekalkan hubungan antara satu sama lain. Ini selalunya melibatkan objek yang memegang rujukan antara satu sama lain, membenarkan komunikasi dan perkongsian data. Satu cara untuk mengurus rujukan objek dalam C ialah melalui penggunaan penunjuk pintar, terutamanya std::shared_ptr.
Pertimbangkan senario hipotesis di mana kelas A memegang senarai rujukan std::shared_ptr kepada objek kelas B, di mana setiap objek B juga perlu memegang rujukan kepada induknya objek A. Ini menimbulkan cabaran: bagaimanakah kelas A boleh lulus std::shared_ptr sendiri (ini) dengan selamat kepada anaknya B?
Pendekatan mudah mungkin ialah mencuba sesuatu seperti child->setParent(this); , tetapi ini tidak betul kerana ini bukan std::shared_ptr yang sah. Penyelesaiannya terletak pada penggunaan std::enable_shared_from_this.
Memperkenalkan std::enable_shared_from_this
std::enable_shared_from_this ialah kelas asas yang membenarkan std. ::shared_ptr rujukan kepada diri mereka sendiri. Dengan mewarisi daripada std::enable_shared_from_this, kelas A mendapat kebolehan untuk memanggil .shared_from_this() untuk mendapatkan penuding dikongsi ke contoh sendiri.
Penyelesaian Menggunakan std::enable_shared_from_this
Dalam kod yang diubah suai di bawah, kelas A dibuat untuk mewarisi daripada std::enable_shared_from_this, dan panggilan anak->setParent() kini menggunakan .shared_from_this():
<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()); } private: // Note the use of std::weak_ptr here std::list<std::weak_ptr<B>> children; };</code>
Atas ialah kandungan terperinci Bagaimanakah saya boleh menghantar `std::shared_ptr` dengan selamat daripada \'ini\' daripada objek induk kepada objek anaknya dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!