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