如果您已经拥有std :: shared_ptr,那么std :: enable_shared_from_this有用吗?

时间:2016-09-16 01:22:01

标签: c++ pointers shared-ptr

我偶然发现std :: enable_shared_from_this,尤其是similar question,但我仍然不明白这是什么意思

反复出现的例子如下:

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 个答案:

答案 0 :(得分:2)

立刻想到两个用例:

  1. 它允许对象将自己移交给保存共享指针的其他东西。对象本身并不拥有共享副本。 shared_from_this的要点是为对象提供内部weak_ptr

  2. 由于传递共享指针是昂贵的(并且冗余,当您知道它总是在调用堆栈中拥有时),标准做法是将包含的对象作为参考传递。如果在调用堆栈的某处,您需要再次获取共享指针,则可以通过shared_from_this执行此操作。