簡體   English   中英

如果您已經有一個 std::shared_ptr 可供使用,那么 std::enable_shared_from_this 有多大用處?

[英]How useful is std::enable_shared_from_this if you already have a std::shared_ptr at your disposal?

我偶然發現了 std::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();
}

但是我沒有得到這個例子,如果我處於這種情況,我會這樣做:

int main()
{
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p; // Results in exactly the same thing
}

謝謝

編輯:我認為關閉問題的人不明白我的意圖。 該帖子被標記為另一個帖子的重復,而帖子的第一行鏈接到同一個“其他帖子”。 我有一個問題,所謂的重復沒有答案。

具體來說,需要將實現 enable_shared_from_this 的類創建為 std::shared_ptr。 所以你可以訪問那個shared_ptr。 我的問題是(在標題中提醒你),“因為無論如何你都被迫擁有一個 std::shared_ptr,所以跟蹤它實際上是否會使 std::enable_shared_from_this 變得無用/冗余?”

立即想到兩個用例:

  1. 它允許對象將自己交給其他保持共享指針的東西。 對象本身不擁有共享副本。 shared_from_this的目的是給對象一個內部的weak_ptr

  2. 由於傳遞共享指針是昂貴的(而且是多余的,當您知道它總是在調用堆棧中擁有時),將包含的對象作為引用傳遞是標准做法。 如果在調用堆棧下方的某個地方,您需要再次獲取共享指針,則可以通過shared_from_this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM