shared_ptr/weak_ptr
允许在对象上保留弱引用,但我无法阻止接收弱者的人将其转换并将其存储为共享对象。所以我失去了对象生命周期的控制权。
unique_ptr
可以控制对象的生命周期,但没有弱引用机制。
我无法找到一种标准的方法来同时获得终身控制和弱参考的好处。我无法相信我是唯一遇到这个问题的人。
标准或者提升中是否有允许此行为的内容?
或者是否有一种模式允许这样做而不重写完整的smart_ptr
类?
答案 0 :(得分:1)
如果你想控制生命周期,它不是一个弱指针。
弱指针可以升级为共享指针。因此,如果您不想共享所有权,则需要传递引用/原始指针。
您可以通过包装weak_ptr
并且不暴露整个界面来制作您自己的有限访问观察者_ptr。但是,在多线程设置中很难保证安全(可以说是shared_ptr
茁壮成长的唯一设置。)
答案 1 :(得分:0)
你要求不可能。
无法通过无法延长对象生命周期的代码安全地访问对象,以覆盖访问对象的时间。
要允许外部代码访问对象,您还必须允许该代码延长对象的生命周期以覆盖它访问对象的时间。
答案 2 :(得分:-1)
好的,没有标准的方法可以做到这一点。
解决方案是将unique_ids添加到所有对象,并且需要弱引用的每个人都存储一个id。
然后我们有一个Manager,它使用公共方法findById(id)保存这些对象的unique_ptr映射。
这样,内存分配完全由管理员控制,任何人都可以保留弱引用。