首頁 >後端開發 >C++ >何時以及如何在 C 中使用 `enable_shared_from_this` ?

何時以及如何在 C 中使用 `enable_shared_from_this` ?

Linda Hamilton
Linda Hamilton原創
2024-12-13 10:00:22165瀏覽

When and How Should You Use `enable_shared_from_this` in C  ?

理解enable_shared_from_this的意義

問題:

問題:

在探索,.許多開發人員都會遇到enable_shared_from_this 概念。儘管閱讀了文檔,但其實際應用仍然不清楚。您能否提供一個範例並解釋何時適合使用此類?

答案:

class Y: public enable_shared_from_this<Y> {
public:
    shared_ptr<Y> f() {
        return shared_from_this();
    }
};

int main() {
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}
enable_shared_from_this 授予獲得「this」有效的shared_ptr 實例的能力,甚至在只有「this」可用的情況下。如果沒有此功能,要取得指向「this」的shared_ptr,則需要將其定義為成員。

請考慮 Boost 文件中的以下範例:

f() 方法傳回一個有效的shared_ptr,儘管缺少成員實例。

需要注意的是,簡單地返回一個shared_ptr使用“this”作為參數構造不是一種可接受的解決方案,因為它會導致與合法的“共享”引用計數不同的引用計數。因此,刪除物件時,其中一個共用指標可能會出現懸空引用。 enable_shared_from_this 現在是 C 11 標準的一部分,使其可以透過 C 11 和 Boost 存取。

以上是何時以及如何在 C 中使用 `enable_shared_from_this` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn