我可能需要重新考虑一下我的整体设计,但就目前而言,看起来我可能想做类似的事情:
class A;
class B;
std::map<boost::shared_ptr<const A>, B> APtrToBMap;
我已经尝试了这个,它似乎在一个简单的情况下工作(编译器没有抱怨,简单的测试似乎工作)。但我对这种方法有了第二个想法。我怀疑那里有一些我不知道的陷阱。
那么,上述实际意义上的有效吗?或者,当我这样做时,是否有一些我不知道的缺陷?
答案 0 :(得分:24)
参考文献可以这样说:
template<class T, class U>
bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b); // never throws
返回:未指定的值,例如
抛出:没有。
注意:允许shared_ptr对象用作关联容器中的键。
答案 1 :(得分:4)
是的,您可以使用共享指针作为std :: map的键,但这是设计损坏的明确标志。它将根据一些随机存储位置进行排序。
你的问题有点模糊。如果你说你将如何使用该地图以及你想要存档什么,你可能会得到更多有用的答案。
答案 2 :(得分:0)
我不是100%熟悉共享指针,但是如果有办法访问原始指针,你可以使用它作为键(如果你仍然担心某些原因)。
答案 3 :(得分:0)
如果你和boost :: python一起使用它,请小心! 如果从Python传入这些shared_ptr对象,基于shared_ptr对象比较的C ++中的所有操作都可能失败