std::shared_ptr::owner_before
STD::共享[医]PTR::所有者[医]以前
template< class Y > bool owner_before( const shared_ptr | | |
---|---|---|
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) |
例
二次
#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/Shared[医]PTR/业主[医]以前