【问题标题】:Storing pointers to const objects in boost::ptr_unordered_map在 boost::ptr_unordered_map 中存储指向 const 对象的指针
【发布时间】:2011-05-11 11:47:42
【问题描述】:

我似乎无法使 boost::ptr_unordered_map<uint32_t, const Foo> 工作 - 底层实现看起来像是将东西转换为 void*

我是否只需要咬紧牙关,让我的方法在插入项目时执行const_cast<Foo*>,或者我在这里遗漏了什么?有没有办法存储指向 const 对象的指针 (const Foo*)?

【问题讨论】:

  • boost::ptr_map 是否适用于 const 对象指针?
  • Martin:不,似乎有同样的问题。
  • 查看svn.boost.org/trac/boost/ticket/3832 似乎他们试图在 boost 1.43 中修复 ptr_list。找不到关于 ptr_map 的任何信息

标签: c++ boost-ptr-container


【解决方案1】:

这似乎是不可能的。

一种解决方法是封装对ptr_unordered_map 的访问。 insert 方法应该接受一个 const auto_ptr 然后执行 const_cast<Foo*> 来插入它。

如果您在删除元素时将 auto_type 交还给客户端代码,则需要从中解压缩指针并将其传输到 const auto_ptr 或类似内容中,以明确所有权转移而不会泄漏非 const 引用。

这对我的用例来说已经足够了,因为我不需要公开任何迭代器行为 - 它是纯粹的单元素插入/释放/查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2021-05-20
    • 2010-09-18
    • 2014-04-21
    • 2015-09-10
    相关资源
    最近更新 更多