首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您可以使用boost::shared_ptr作为地图的键吗?

您可以使用boost::shared_ptr作为地图的键吗?
EN

Stack Overflow用户
提问于 2010-11-10 23:21:30
回答 4查看 4.5K关注 0票数 13

我可能需要更多地重新考虑我的整体设计,但现在看来,我可能想要做一些如下的事情:

代码语言:javascript
复制
class A; 
class B;
std::map<boost::shared_ptr<const A>, B> APtrToBMap;

我已经尝试过了,它似乎在一个简单的情况下确实有效(编译器没有抱怨,简单的测试似乎也有效)。但我对这种方法有了新的想法。我怀疑这里面有一些我不知道的陷阱。

那么,上述结论在实际意义上是有效的吗?或者,当我这样做时,有没有什么我没有意识到的缺陷?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-10 23:27:54

参考文献是这样说的:

代码语言:javascript
复制
template<class T, class U>
  bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b); // never throws

返回:一个未指定的值,使得

  • operator<是一种严格的弱排序,如C++ standard;
  • under C++,!(a < b) && !(b < a)定义的等价关系中所述,两个shared_ptr实例等价的充要条件是它们共享所有权或都为空。

没什么。

注意:允许将shared_ptr对象用作关联容器中的键。

票数 24
EN

Stack Overflow用户

发布于 2010-11-11 00:40:06

是的,您可以使用共享指针作为std::map的键,但这肯定是设计失败的标志。它将根据一些随机的存储位置进行排序。

你的问题有点含糊。如果你说你将如何使用这张地图,以及你想要存档什么,你可能会得到更有用的答案。

票数 4
EN

Stack Overflow用户

发布于 2010-11-11 00:24:01

我不是100%熟悉共享指针,但是如果有一种方法可以访问原始指针,你可以使用它作为键(如果你仍然担心某些原因)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4145957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档