std::shared_ptr of "this" 難題
在智慧指標領域,你可能會遇到這樣的場景:一個類別的物件A,父級,需要與其子級(B 類別的物件)共用對自身的參考。但是,傳遞一個簡單的指標到“this”可能會導致無意義的錯誤。
解決方案在於神秘的std::enable_shared_from_this 工具。從此類繼承可讓您在類別中存取 .shared_from_this(),從而授予您目前物件的共用擁有權。
然而,這種互連性出現了一個重要的警告:循環依賴的可能性。為了避免資源洩漏的陷阱,明智的做法是在建立此類依賴項時引入 std::weak_ptr。
採用這種修改後的方法,修改後的程式碼可能類似於以下內容:
<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>
請記住,呼叫.shared_from_this() 需要在呼叫時std::shared_ptr擁有該物件的所有權。這消除了堆疊分配物件的可能性,並且通常限制從建構子或析構函數中呼叫 .shared_from_this()。
以上是如何使用'std::shared_ptr”安全地與子物件共用對'this”的引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!