到期后boost :: weak_ptr的排序顺序?

Han*_* S. 5 c++ boost boost-smart-ptr

对于boost::weak_ptroperator<定义,使其能够在关联容器中使用.

我的问题是:几个weak_ptr对象的排序顺序是否稳定,即使它们中的一些变为零的引用数量?容器不是那么乱std::set吗?

例:

using namespace boost;
shared_ptr<A> sptrA1(new A);
weak_ptr<A> wptrA1 = sptrA1;
weak_ptr<A> wptrA2;

{ // begin Scope 1
    shared_ptr<A> sptrA2(new A);
    wptrA2 = sptrA2;
    assert(wptrA1 < wptrA2); // assert #1
}
assert(wptrA1 < wptrA2); // assert #2
Run Code Online (Sandbox Code Playgroud)
  • 如果断言#1为真,断言#2总是成立吗?
  • wptrA2范围1之前和之后是否处于相同的状态?

bdo*_*lan 5

在当前的实现中boost::weak_ptr,operator<比较指向内部引用计数跟踪结构的指针.在删除所有强引用和弱引用之前,不会释放此结构,因此operator<即使由于缺少强引用而已释放指向的用户数据,它仍然可以安全使用.