std::shared_ptr<T>:: owner_before
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
(C++17)
|
||||
|
(
until C++20*
)
|
||||
|
shared_ptr::owner_before
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
|
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(C++20)
|
||||
|
functions
(
until C++26*
)
|
||||
| Helper classes | ||||
|
(C++20)
|
||||
| Deduction guides (C++17) |
|
template
<
class
Y
>
bool owner_before ( const shared_ptr < Y > & other ) const noexcept ; |
||
|
template
<
class
Y
>
bool owner_before ( const std:: weak_ptr < Y > & other ) const noexcept ; |
||
Comprueba si este
shared_ptr
precede a
other
en un orden definido por la implementación basado en propietario (en oposición a basado en valor). El orden es tal que dos punteros inteligentes se comparan equivalentes solo si ambos están vacíos o si ambos poseen el mismo objeto, incluso si los valores de los punteros obtenidos mediante
get()
son diferentes (por ejemplo, porque apuntan a diferentes subobjetos dentro del mismo objeto).
Este ordenamiento se utiliza para que los punteros compartidos y débiles puedan usarse como claves en contenedores asociativos, típicamente a través de std::owner_less .
Contenidos |
Parámetros
| otro | - | el std::shared_ptr o std::weak_ptr a comparar |
Valor de retorno
true si * this precede a other , false en caso contrario. Las implementaciones comunes comparan las direcciones de los bloques de control.
Ejemplo
#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' // no compilará // << "w3 < w2 " << (w3 < w2) << '\n' // no compilará << "w2.owner_before(w3) " << w2.owner_before(w3) << '\n' << "w3.owner_before(w2) " << w3.owner_before(w2) << '\n'; }
Salida:
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
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2873 | C++11 |
owner_before
no estaba declarado
noexcept
|
declarado noexcept |
Véase también
|
(C++11)
|
proporciona ordenación basada en propietario de tipos mixtos para punteros shared y weak
(plantilla de clase) |