boost::weak_ptr 过期后的排序顺序?
对于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
在范围 1 之前和之后的状态是否相同?
For boost::weak_ptr
the operator<
is defined, so that it can be used in associative containers.
My question is: Is the sort order of several weak_ptr
objects stable even when some of them change to a refcount of zero? Doesn't that mess with containers like std::set
?
Example:
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
- Will assert #2 always hold true if assert #1 is true?
- Is
wptrA2
in the same state before and after the Scope 1?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在
boost::weak_ptr
的当前实现中,operator<
将指针与内部引用计数跟踪结构进行比较。在删除所有强和弱引用之前,不会释放该结构,因此即使由于某个原因而释放了指向的用户数据,使用operator<
仍然是安全的。缺乏强有力的参考。In the current implementation of
boost::weak_ptr
,operator<
compares a pointer to an internal reference-count-tracking structure. This structure is not freed until all strong and weak references are removed, so it remains safe to useoperator<
even if the pointed-to user data has been freed due to a lack of strong references.在此处了解weak_ptr比较。
Read about weak_ptr comparision here.
使用 std::owner_less。这比较的是使用计数的指针,而不是指针本身。例如:
Use std::owner_less. This compares the pointer of the use count, not the pointer itself. For example: