首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::shared_ptr::owner_before

template< class Y > bool owner_before( const shared_ptr<Y>& other) const;

template< class Y > bool owner_before( const std::weak_ptr<Y>& other) const;

检查这个shared_ptr先于other在实现中,定义的基于所有者的%28与基于值的%29顺序相反。这样的顺序是,两个智能指针只有在它们都是空的或者它们都拥有相同的对象时才比较等效,即使GET%28%29获得的指针的值是不同的%28 e.g。因为它们指向同一对象%29内的不同子对象。

此顺序用于使共享和弱指针在关联容器中用作键,通常通过std::owner_less...

参数

other

-

the std::shared_ptr or std::weak_ptr to be compared

返回值

true如果*this先于other,,,false否则。常用实现比较控制块的地址。

例外

(none)

(until C++17)

noexcept specification: noexcept

(since C++17)

二次

代码语言:javascript
复制
#include <iostream>
#include <memory>
 
struct Foo {
    int n1;
    int n2; 
    Foo(int a, int b) : n1(a), n2(b) {}
};
int main()
{   
    auto p1 = std::make_shared<Foo>(1, 2);
    std::shared_ptr<int> p2(p1, &p1->n1);
    std::shared_ptr<int> p3(p1, &p1->n2);
 
    std::cout << std::boolalpha
              << "p2 < p3 " << (p2 < p3) << '\n'
              << "p3 < p2 " << (p3 < p2) << '\n'
              << "p2.owner_before(p3) " << p2.owner_before(p3) << '\n'
              << "p3.owner_before(p2) " << p3.owner_before(p2) << '\n';
 
    std::weak_ptr<int> w2(p2);
    std::weak_ptr<int> w3(p3);
    std::cout 
//              << "w2 < w3 " << (w2 < w3) << '\n'  // won't compile 
//              << "w3 < w2 " << (w3 < w2) << '\n'  // won't compile
              << "w2.owner_before(w3) " << w2.owner_before(w3) << '\n'
              << "w3.owner_before(w2) " << w3.owner_before(w2) << '\n';
 
}

二次

产出:

二次

代码语言:javascript
复制
p2 < p3 true
p3 < p2 false
p2.owner_before(p3) false
p3.owner_before(p2) false
w2.owner_before(w3) false
w3.owner_before(w2) false

二次

另见

owner_less (C++11)

provides mixed-type owner-based ordering of shared and weak pointers (class template)

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券