std::weak_ptr::owner_before
| template< class Y > bool owner_before( const weak_ptr<Y>& other) const; |  |  | 
|---|---|---|
| template< class Y > bool owner_before( const std::shared_ptr<Y>& other) const; |  |  | 
检查这个weak_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否则。常用实现比较控制块的地址。
例
二次
#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';
 
}二次
产出:
二次
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) | 
|---|
 © cppreference.com在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

