比较 shared_ptr 个实例的有效情况

Valid situations for comparing shared_ptr instances

在什么情况下比较 shared_ptr 实例而不是 shared_ptr 管理的底层类型是有效的?

举个例子,在下面的代码有 运行 之后,personset 的大小为 2 是否有效?

shared_ptr<person> p0 = make_shared<person>(....);
shared_ptr<person> p1 = p0;

set<shared_ptr<person>> personset;

personset.insert(p0);
personset.insert(p1);

没有可行的理由来比较这些实例。事实上 shared_ptrs 默认情况下将通过指向控制块的底层指针(通过 .get 方法)执行 equality/inequality 比较器。

http://en.cppreference.com/w/cpp/memory/shared_ptr/operator_cmp