gpt4 book ai didi

c++11: std::enable_shared_from_this 现实生活中的例子?

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:30 25 4
gpt4 key购买 nike

我阅读了有关 std::enable_shared_from_this 的内容,我了解它的工作原理,但我不明白它旨在解决什么问题?

例如来自这里:What is the usefulness of `enable_shared_from_this`?

class Y: public std::enable_shared_from_this<Y>
{
public:

std::shared_ptr<Y> f()
{
return shared_from_this();
}
};

std::shared_ptr<Y> p(new Y);
std::shared_ptr<Y> q = p->f();

是的,很好,我们可以编写 q=p->f();,但为什么不直接q = p;?

一般情况下我们有shared_ptr,但由于某些原因它在某处不可用,所以我们必须从this恢复它,但是如果我们将原始指针从 shared_ptr 传递到 somewhere 那么我们就有问题了,因为如果我们从 获取指针,所有 shared_ptr 安全都会消失>std::shared_ptr::get,并将原始指针传递给某人。

最佳答案

您的类中有一个方法需要分发指向 this 的弱指针或共享指针。不只是返回,还可能调用不同的函数,将指向自身的 shared_ptr 传递给它。

您要么必须使用 shared-ptr-to-this 扩充该方法,将其更改为采用共享 ptr 的非方法,在类中存储指向 this 的弱 ptr,要么从 enable_shared_from_this 继承。

enable_shared_from_this 基本上是“给你自己存储一个 weak_ptr”,在 shared-ptr 创建代码的帮助下对其进行初始化。

关于c++11: std::enable_shared_from_this 现实生活中的例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816169/

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