首頁 > 後端開發 > C++ > 如何使用'std::shared_ptr”安全地與子物件共用對'this”的引用?

如何使用'std::shared_ptr”安全地與子物件共用對'this”的引用?

Barbara Streisand
發布: 2024-10-29 11:46:30
原創
407 人瀏覽過

How Can I Safely Share a Reference to

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板