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 ; |
||
`) n'a pas été traduit
- Les termes spécifiques au C++ (comme `template`, `class`, `bool`, `const`, `noexcept`, `shared_ptr`, `weak_ptr`, etc.) ont été conservés dans leur forme originale
- La structure et le formatage du tableau HTML sont restés identiques
Vérifie si ce
shared_ptr
précède
other
dans l'ordre défini par l'implémentation basé sur le propriétaire (par opposition à l'ordre basé sur la valeur). L'ordre est tel que deux pointeurs intelligents sont équivalents uniquement s'ils sont tous deux vides ou s'ils possèdent le même objet, même si les valeurs des pointeurs obtenues par
get()
sont différentes (par exemple parce qu'ils pointent vers différents sous-objets du même objet).
Cet ordonnancement est utilisé pour permettre aux pointeurs partagés et faibles d'être utilisés comme clés dans les conteneurs associatifs, généralement via std::owner_less .
Table des matières |
Paramètres
| autre | - | le std::shared_ptr ou std::weak_ptr à comparer |
Valeur de retour
true si * this précède other , false sinon. Les implémentations courantes comparent les adresses des blocs de contrôle.
Exemple
#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' // ne compilera pas // << "w3 < w2 " << (w3 < w2) << '\n' // ne compilera pas << "w2.owner_before(w3) " << w2.owner_before(w3) << '\n' << "w3.owner_before(w2) " << w3.owner_before(w2) << '\n'; }
Sortie :
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
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2873 | C++11 |
owner_before
n'était pas déclaré
noexcept
|
déclaré noexcept |
Voir aussi
|
(C++11)
|
fournit un ordonnancement basé sur le propriétaire de types mixtes pour les pointeurs partagés et faibles
(modèle de classe) |