std::weak_ptr<T>:: owner_before
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
weak_ptr::owner_before
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
| Helper classes | ||||
|
(C++20)
|
||||
| Deduction guides (C++17) |
|
template
<
class
Y
>
bool owner_before ( const weak_ptr < Y > & other ) const noexcept ; |
||
|
template
<
class
Y
>
bool owner_before ( const std:: shared_ptr < Y > & other ) const noexcept ; |
||
Comprueba si este
weak_ptr
precede a
other
en un orden definido por la implementación basado en propietario (en oposición al 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 2083 | C++11 |
owner_before
no estaba declarado
const
|
declarado const |
| LWG 2942 | 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) |