boost::weak_ptr 与自定义删除器交互
我有一个带有自定义删除器的 boost::shared_ptr
。当将其转换为 weak_ptr
时,删除者信息是否会丢失?如果是,如何将相同的删除器重新附加到从 weak_ptr::lock()
方法获取的 shared_ptr
-s ?
我正在实现的功能是一个指向某种类型的活动实例的 weak_ptr
-s 容器。我需要自定义删除器来删除要删除的对象的容器条目。
I have a boost::shared_ptr
with a custom deleter attached. When converting this to weak_ptr
is the deleter information lost? If yes, how do I reattach the same deleter to shared_ptr
-s acquired from weak_ptr::lock()
method?
The feature I am implementing is a container of weak_ptr
-s pointing to the alive instances of some type. I need the custom deleter to remove the container entry for objects being deleted.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不,自定义删除器永远不会丢失。
当您
lock()
您的weak_ptr
时,您将重新获得一个shared_ptr
,其具有与您用来创建弱指针的删除器相同的自定义删除器(和其他属性)。首先是weak_ptr
。但是,如果不再有
shared_ptr
引用您的weak_ptr
,lock()
将失败并返回 nullshared_ptr
。也就是说,您不必关心自定义删除器。如果您在创建
shared_ptr
时指定了它,则当最后一个相关的shared_ptr
被释放时,它将被调用。No, the custom deleter is never lost.
When you
lock()
yourweak_ptr
you regain ashared_ptr
with the same custom deleter (and other attributes) that the one you use to create theweak_ptr
from in the first place.However, If no
shared_ptr
references yourweak_ptr
any longer, thelock()
will fail and return a nullshared_ptr
.That is, you shouldn't have to care about the custom deleter. If you specified it upon the
shared_ptr
creation, it will be called when the last relatedshared_ptr
will be freed.