我有一个带有自定义删除器的 boost::shared_ptr
。将其转换为 weak_ptr
时删除者信息丢失了吗?如果是,我如何将相同的删除器重新附加到 shared_ptr
- 从 weak_ptr::lock()
方法获取的?
我正在实现的功能是 weak_ptr
的容器,指向某种类型的事件实例。我需要自定义删除器来删除要删除的对象的容器条目。
最佳答案
不,自定义删除器永远不会丢失。
当您lock()
您的weak_ptr
时,您会重新获得一个shared_ptr
,它具有与您使用的相同的自定义删除器(和其他属性)从一开始就创建 weak_ptr
。
但是,如果不再有 shared_ptr
引用您的 weak_ptr
,lock()
将失败并返回一个空的 shared_ptr
.
也就是说,您不必关心自定义删除器。如果您在 shared_ptr
创建时指定它,它将在最后一个相关的 shared_ptr
被释放时被调用。
关于c++ - boost::weak_ptr 与自定义删除器的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3615421/