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

发布于 2024-10-13 10:44:10 字数 592 浏览 6 评论 0原文

对于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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

樱桃奶球 2024-10-20 10:44:10

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 use operator< even if the pointed-to user data has been freed due to a lack of strong references.

深爱成瘾 2024-10-20 10:44:10

此处了解weak_ptr比较。

Read about weak_ptr comparision here.

趁年轻赶紧闹 2024-10-20 10:44:10

使用 std::owner_less。这比较的是使用计数的指针,而不是指针本身。例如:

typedef std::weak_ptr<int> IntWPtr;
std::set<IntWPtr, std::owner_less<IntWPtr> > m_set;

Use std::owner_less. This compares the pointer of the use count, not the pointer itself. For example:

typedef std::weak_ptr<int> IntWPtr;
std::set<IntWPtr, std::owner_less<IntWPtr> > m_set;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文