boost::weak_ptr 与自定义删除器交互

发布于 2024-09-17 00:19:02 字数 262 浏览 5 评论 0原文

我有一个带有自定义删除器的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

゛时过境迁 2024-09-24 00:19:57

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

当您lock()您的weak_ptr时,您将重新获得一个shared_ptr,其具有与您用来创建弱指针的删除器相同的自定义删除器(和其他属性)。首先是weak_ptr

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

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

No, the custom deleter is never lost.

When you lock() your weak_ptr you regain a shared_ptr with the same custom deleter (and other attributes) that the one you use to create the weak_ptr from in the first place.

However, If no shared_ptr references your weak_ptr any longer, the lock() will fail and return a null shared_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 related shared_ptr will be freed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文