c++ - 检查调用shared_from_this()是否有效的方法?

标签 c++ shared-ptr

我想使用 shared_from_this() 从通过引用传递的对象中获取 std::shared_ptr 。但是,我希望对可能不在共享指针中或什至可能不是动态分配的对象具有鲁棒性。

有没有办法在调用 shared_from_this() 的潜在未定义行为之前检查给定对象(继承自 enable_shared_from_this 并通过引用传递)是否由共享指针管理

最佳答案

您可以实现自己的 make_sharedshared_from_thisenable_shared_from_this,它们具有您想要的任何语义。实现您要求的语义并不困难:

  1. 该类应包含一个指向其模板化类实例的 weak_ptr

  2. make_shared 实现应首先从它创建的 shared_ptr 初始化弱指针。

  3. shared_from_this 应尝试锁定弱指针,如果失败则返回空的 shared_ptr

或者,如果 weak_from_this 在您的平台上可用(它是 C++17 功能),您可以直接使用它。

但是,正如其他人所说,似乎很难相信这确实是解决您遇到的任何问题的最佳解决方案。您需要 shared_from_this 工作的情况必须与 shared_from_this 工作的情况完全一致。很难想象这样的用例。

关于c++ - 检查调用shared_from_this()是否有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667706/

相关文章:

c++ - 智能指针 + "this"被认为是有害的?

c++ - 将 vector<boost::shared_ptr<Foo>> 转换为 vector<Foo*> ,这可能吗?

c++ - 如何防止删除用作共享指针的原始指针?

c++ - 将流运算符与模板类一起使用

c++ - 通过引用 C++ 中的基类循环遍历派生类

c++ - 与虚拟析构函数相比,shared_ptr 用于子类析构的运行时开销

c++ - std::shared_ptr<X> 是否有复制构造函数?

c++ - 是否可以使用互斥锁来锁定 vector 中的元素而不是整个 vector ?

c++ - 将节点引用到优先级队列(迭代器)

c++ - Profiler 显示没有时间进行跳跃,但有很多时间进行比较