Namespaces
Variants

std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
~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

  • s désigne l'objet Smart adapté,
  • args... désigne les arguments capturés,
  • p désigne la valeur du Pointer stocké, ou static_cast < Pointer > ( * operator void ** ( ) ) si operator void ** a été appelé,
  • SP est
    • 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 ) ... ) ; } ;
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises spécifiques au code et contient des termes techniques C++ qui doivent rester en anglais. Seul le texte en dehors des balises de code aurait été traduit, mais dans cet extrait, il n'y a pas de texte à traduire en dehors du code C++.

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 ) ... ) ; } ;
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises spécifiques et contient des termes techniques C++ qui doivent rester en anglais pour préserver leur signification technique exacte.

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