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

标签 c++ c++11 boost

我阅读了有关 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/

相关文章:

c++ - 接收 MFC 对话框的 PostMessage 消息

c++ - 构造函数符号的双重发射

c++ - 应用 SFINAE 检查是否为 T 定义了特征

c++ - 尝试将 boost.serialization 包含到我的 VS 项目时遇到问题

c++ - 指针指针的自动内存管理

java - 大规模机器学习

c++ - 重载 C++ 赋值运算符的最佳方法

c++ - 代码中什么定义了c++版本?

c++ - GCC 值得在 Windows 上使用来代替 MSVC?

c++ - 当我安装了多个 Visual Studio 版本时,如何使用 Visual Studio 2008 构建 boost?