小编典典

`enable_shared_from_this` 有什么用处?

all

我在阅读 Boost.Asio
示例时遇到了enable_shared_from_this问题,在阅读了文档后,我仍然不知道应该如何正确使用它。有人可以给我一个例子和解释什么时候使用这个类是有意义的。


阅读 118

收藏
2022-03-23

共1个答案

小编典典

它使您能够获得一个有效的shared_ptr实例this,当您拥有的是this. 没有它,您将无法获得shared_ptrto
this,除非您已经拥有一个成员。此示例来自enable_shared_from_this 的 boost
文档

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
}

该方法f()返回一个 valid shared_ptr,即使它没有成员实例。请注意,您不能简单地这样做:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
}

此返回的共享指针将具有与“正确”的引用计数不同的引用计数,并且当对象被删除时,其中一个最终将丢失并持有一个悬空引用。

enable_shared_from_this已成为 C++ 11 标准的一部分。您也可以从那里以及从 boost 中获取它。

2022-03-23