在线文档教程
C++
应用 | Utilities

std::weak_ptr::owner_before

性病:弱[医]PTR::所有者[医]以前

template< class Y > bool owner_before( const weak_ptr& 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。

http://en.cppreference.com/w/cpp/Memory/WILE[医]PTR/业主[医]以前