如果您已经有一个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?

本文关键字:shared std 那么 有多 this from enable ptr 有一个 如果      更新时间:2023-10-16

我无意中发现了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来实现。