std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::~inout_ptr_t
|
||||
| Non-member functions | ||||
|
~inout_ptr_t
(
)
;
|
(depuis C++23) | |
Réinitialise l'objet adapté
Smart
par la valeur de l'objet modifié
Pointer
(ou l'objet
void
*
si
operator
void
**
(
)
a été appelé) et les arguments capturés.
release
(
)
peut être appelé sur l'objet adapté
Smart
s'il n'est pas appelé par le constructeur.
Soit
-
sdésigne l'objetSmartadapté, -
args...désigne les arguments capturés, -
pdésigne la valeur duPointerstocké, ou static_cast < Pointer > ( * operator void ** ( ) ) si operator void ** a été appelé, -
SPest- Smart :: pointer , s'il est valide et désigne un type, sinon,
- Smart :: element_type * , si Smart :: element_type est valide et désigne un type, sinon,
- std:: pointer_traits < Smart > :: element_type * , si std:: pointer_traits < Smart > :: element_type est valide et désigne un type, sinon,
-
Pointer,
- /*do-release*/ désigne s. release ( ) si le constructeur n'appelle pas release ( ) , vide sinon.
Si
Smart
est un type pointeur, le destructeur effectue
- s = static_cast < Smart > ( p ) ; , et le programme est mal formé si sizeof... ( Args ) > 0 ;
sinon, si s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) est bien formé, le destructeur effectue
- /*do-release*/ ; if ( p ) { s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
sinon, si std:: is_constructible_v < Smart, SP, Args... > est true , le destructeur effectue
- /*do-release*/ ; if ( p ) { s = Smart ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
sinon, le programme est mal formé.
Notes
L'implémentation peut allouer le stockage pour la structure de données nécessaire pour
Smart
(par exemple un bloc de contrôle) lors de la construction, afin de laisser les opérations non levantes au destructeur.
Les arguments capturés par valeur sont détruits après la réinitialisation.
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 | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3897 | C++23 | le destructeur ne mettait pas à jour un pointeur brut vers la valeur nulle | il le fait |