![](/img/trans.png)
[英]Why does std::enable_shared_from_this allow multiple std::shared_ptr instances?
[英]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 變得無用/冗余?”
立即想到兩個用例:
它允許對象將自己交給其他保持共享指針的東西。 對象本身不擁有共享副本。 shared_from_this
的目的是給對象一個內部的weak_ptr
。
由於傳遞共享指針是昂貴的(而且是多余的,當您知道它總是在調用堆棧中擁有時),將包含的對象作為引用傳遞是標准做法。 如果在調用堆棧下方的某個地方,您需要再次獲取共享指針,則可以通過shared_from_this
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.