对于boost::weak_ptr
,已定义operator<
,以便可以在关联容器中使用。
我的问题是:即使某些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
wptrA2
是否处于相同状态? 最佳答案
在boost::weak_ptr
的当前实现中,operator<
将指针与内部引用计数跟踪结构进行比较。在删除所有强引用和弱引用之前,不会释放此结构,因此,即使由于缺少强引用而释放了指向用户的数据,使用operator<
仍然是安全的。