c++ - 有没有办法在对象上保持弱引用并控制它的生命周期?

标签 c++ boost c++14

  • shared_ptr/weak_ptr 允许在对象上保留弱引用,但我无法阻止收到弱引用的人将其转换并将其存储为共享对象。所以我失去了对对象生命周期的控制。

  • unique_ptr 可以控制对象的生命周期,但没有弱引用机制。

我找不到同时拥有生命周期控制和弱引用优势的标准方法。我不敢相信我是唯一遇到这个问题的人。

标准或 boost 中是否有任何允许这种行为的内容? 或者是否有一种模式允许这样做而无需重写完整的 smart_ptr 类?

最佳答案

如果要控制生命周期,那不是弱指针。

弱指针可以升级为共享指针。因此,如果您不想共享所有权,则需要传递引用/原始指针。

您可以通过包装一个 weak_ptr 并且不暴露整个接口(interface)来创建您自己的一种限制访问的 observer_ptr。然而,这在多线程设置中很难保证安全(可以说是 shared_ptr 蓬勃发展的唯一设置)。

关于c++ - 有没有办法在对象上保持弱引用并控制它的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190407/

相关文章:

c# - 为什么我的 C# 代码在回调到 C++ COM 直到 Task.Wait/Thread.Join 之前会停止?

c++ - 为什么我的代码会崩溃?

c++ - 相同输入的 boost sha1 和 openssl 库的不同输出

c++ - boost::asio::acceptor - 在旧连接仍然打开时接受新的传入连接

C++ lambda : how to avoid slicing a reference if captured by value

c++ - libsoup客户端的简单例子

c++ - 初始化构造函数的默认参数的首选方法是什么?

c++ - boost::thread 构建错误(无法链接 lib && 未解析的外部)

c++ - 使用基类模板检测 is_base_of

c++ - 如何在C++中将ifstream和ofstream传递给相同的函数对象?