你可以使用boost :: shared_ptr作为地图的关键吗?

Tae*_*las 13 c++ stdmap shared-ptr

我可能需要更多地重新考虑我的整体设计,但就目前而言,看起来我可能想做类似的事情:

class A; 
class B;
std::map<boost::shared_ptr<const A>, B> APtrToBMap;
Run Code Online (Sandbox Code Playgroud)

我试过这个,它似乎在一个简单的情况下工作(编译器没有抱怨,简单的测试似乎工作).但我对这种方法有了第二个想法.我怀疑那里有一些我不知道的陷阱.

那么,上述实际意义上的有效吗?或者,当我这样做时,我不知道有什么缺陷吗?

Unc*_*ens 24

该引用有这样的说法:

template<class T, class U>
  bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b); // never throws
Run Code Online (Sandbox Code Playgroud)

返回:未指定的值,以便

  • operator <是严格的弱排序,如C++标准的第25.3节[lib.alg.sorting]中所述;
  • 在operator <,!(a <b)&&!(b <a)定义的等价关系下,当且仅当它们共享所有权或者都是空的时,两个shared_ptr实例是等效的.

抛出:没什么.

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