c++ - boost::weak_ptr 过期后的排序顺序?

标签 c++ boost boost-smart-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 之前和之后处于相同的状态?

最佳答案

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

关于c++ - boost::weak_ptr 过期后的排序顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4762153/

相关文章:

c++ - C++ 中的跨平台网络代码?

c++ - 优化与未优化构建的 KCachegrind 输出

c# - 编码变量参数 - __arglist 或替代

c++ - clang 3.9、auto_ptr 和 boost

C++——当我们使用 string(0) 时调用哪个 string 构造函数?

c++ - 在 Ubuntu 中编译 Boost SSL 失败

c++ - boost::asio signal_set 处理程序仅在捕获到第一个信号后执行,并忽略相同类型的连续信号

c++ - 如何将 boost::weak_ptr 转换为 boost::shared_ptr

c++ - 这是将 boost::scope_ptr 与数组一起使用的正确方法吗?