std::weak_ptr<T>:: weak_ptr
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
weak_ptr::weak_ptr
|
||||
| Modifiers | ||||
| Observers | ||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
| Helper classes | ||||
|
(C++20)
|
||||
| Deduction guides (C++17) |
|
constexpr
weak_ptr
(
)
noexcept
;
|
(1) | (depuis C++11) |
|
weak_ptr
(
const
weak_ptr
&
r
)
noexcept
;
|
(2) | (depuis C++11) |
|
template
<
class
Y
>
weak_ptr ( const weak_ptr < Y > & r ) noexcept ; |
(2) | (depuis C++11) |
|
template
<
class
Y
>
weak_ptr ( const std:: shared_ptr < Y > & r ) noexcept ; |
(2) | (depuis C++11) |
|
weak_ptr
(
weak_ptr
&&
r
)
noexcept
;
|
(3) | (depuis C++11) |
|
template
<
class
Y
>
weak_ptr ( weak_ptr < Y > && r ) noexcept ; |
(3) | (depuis C++11) |
Construit un nouveau
weak_ptr
qui partage potentiellement un objet avec
r
.
weak_ptr
vide.
weak_ptr
qui partage un objet géré par
r
. Si
r
ne gère aucun objet,
*
this
ne gère aucun objet non plus. Les surcharges template ne participent pas à la résolution de surcharge sauf si
Y*
est implicitement convertible en
T*
, ou
Y
est le type "tableau de
N
U
" pour un certain type
U
et un certain nombre
N
, et
T
est le type "tableau de limite inconnue de (éventuellement qualifié cv)
U
"
(depuis C++17)
.
Y*
est implicitement convertible en
T*
.
Table des matières |
Paramètres
| r | - | un std::shared_ptr ou std::weak_ptr qui sera visualisé par ce std::weak_ptr |
Notes
Parce que le constructeur par défaut est
constexpr
, les
std::weak_ptr
statiques sont initialisés dans le cadre de
l'initialisation non-locale statique
, avant que toute initialisation non-locale dynamique ne commence. Cela rend sûr d'utiliser un
std::weak_ptr
dans le constructeur de tout objet statique.
Exemple
#include <iostream> #include <memory> struct Foo {}; int main() { std::weak_ptr<Foo> w_ptr; { auto ptr = std::make_shared<Foo>(); w_ptr = ptr; std::cout << "w_ptr.use_count() inside scope: " << w_ptr.use_count() << '\n'; } std::cout << "w_ptr.use_count() out of scope: " << w_ptr.use_count() << '\n'; std::cout << "w_ptr.expired() out of scope: " << std::boolalpha << w_ptr.expired() << '\n'; }
Sortie :
w_ptr.use_count() inside scope: 1 w_ptr.use_count() out of scope: 0 w_ptr.expired() out of scope: true
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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2315 | C++11 |
la sémantique de déplacement n'était pas activée pour
weak_ptr
|
activée |
Voir aussi
assigne le
weak_ptr
(fonction membre publique) |