c++ - boost::weak_ptr 与自定义删除器的交互

标签 c++ boost shared-ptr weak-ptr

我有一个带有自定义删除器的 boost::shared_ptr。将其转换为 weak_ptr 时删除者信息丢失了吗?如果是,我如何将相同的删除器重新附加到 shared_ptr - 从 weak_ptr::lock() 方法获取的?

我正在实现的功能是 weak_ptr 的容器,指向某种类型的事件实例。我需要自定义删除器来删除要删除的对象的容器条目。

最佳答案

不,自定义删除器永远不会丢失。

当您lock() 您的weak_ptr 时,您会重新获得一个shared_ptr,它具有与您使用的相同的自定义删除器(和其他属性)从一开始就创建 weak_ptr

但是,如果不再有 shared_ptr 引用您的 weak_ptrlock() 将失败并返回一个空的 shared_ptr.

也就是说,您不必关心自定义删除器。如果您在 shared_ptr 创建时指定它,它将在最后一个相关的 shared_ptr 被释放时被调用。

关于c++ - boost::weak_ptr 与自定义删除器的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3615421/

相关文章:

c++ - 不允许抽象类类型 "Connection"的对象

c++ - std::weak_ptr::锁和对象销毁

c++ - boost 矩阵与遗物

c++ - 如何在不模板化类的情况下处理不同的返回类型以保留 API 接口(interface)

python - 如何在 cython 中制作从 C struct 到 int 的 C++ 映射?

c++ - 为什么允许这些默认参数?

c++ - Boost.Spirit.Qi : dynamically create "difference" parser at parse time

c++ - 共享指针 : why no double free?

C++ 类 API 方法返回临时可迭代物质的链接

c++ - Boost::variant 的多态 setter