gpt4 book ai didi

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

转载 作者:bug小助手 更新时间:2023-10-28 01:31:40 27 4
gpt4 key购买 nike

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

最佳答案

当你只有 this 时,它使你能够为 this 获取一个有效的 shared_ptr 实例。没有它,您将无法获得 shared_ptrthis,除非您已经拥有一个成员。这个例子来自 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/712279/

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