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

时间:2017-04-03 17:05:04

标签: c++ boost c++14

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

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

我无法找到一种标准的方法来同时获得终身控制和弱参考的好处。我无法相信我是唯一遇到这个问题的人。

标准或者提升中是否有允许此行为的内容? 或者是否有一种模式允许这样做而不重写完整的smart_ptr类?

3 个答案:

答案 0 :(得分:1)

如果你想控制生命周期,它不是一个弱指针。

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

您可以通过包装weak_ptr并且不暴露整个界面来制作您自己的有限访问观察者_ptr。但是,在多线程设置中很难保证安全(可以说是shared_ptr茁壮成长的唯一设置。)

答案 1 :(得分:0)

你要求不可能。

无法通过无法延长对象生命周期的代码安全地访问对象,以覆盖访问对象的时间。

要允许外部代码访问对象,您还必须允许该代码延长对象的生命周期以覆盖它访问对象的时间。

答案 2 :(得分:-1)

好的,没有标准的方法可以做到这一点。

解决方案是将unique_ids添加到所有对象,并且需要弱引用的每个人都存储一个id。

然后我们有一个Manager,它使用公共方法findById(id)保存这些对象的unique_ptr映射。

这样,内存分配完全由管理员控制,任何人都可以保留弱引用。