对于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
- 如果断言 #1 为真,那么断言 #2 是否总是成立?
wptrA2
在 Scope 1 前后是否处于相同状态?
use_count
在这里的作用做任何声明 :) 话虽如此,内部引用计数结构保持两个计数 - 仅针对强引用的计数(当它归零时,指向对象被销毁),以及同时包含强引用和弱引用的计数(当它归零时,引用计数结构被销毁)。use_count
函数可能正在查看仅限于强引用的计数,但我没有进行过任何调查,所以请自行验证。 :) - bdonlan