gpt4 book ai didi

c++ - `enable_shared_from_this` 有什么用?

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:48 25 4
gpt4 key购买 nike

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

最佳答案

当您只有this 时,它使您能够获得this 的有效shared_ptr 实例。没有它,您将无法获得 thisshared_ptr,除非您已经拥有一个作为成员。此示例来自 boost documentation for 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();
assert(p == q);
assert(!(p < q || q < p)); // p and q must share ownership
}

方法 f() 返回一个有效的 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 获取它。

关于c++ - `enable_shared_from_this` 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com