std:: out_ptr_t
|
Défini dans l'en-tête
<memory>
|
||
|
template
<
class
Smart,
class
Pointer,
class
...
Args
>
class out_ptr_t ; |
(depuis C++23) | |
out_ptr_t
est utilisé pour adapter des types tels que les pointeurs intelligents pour des fonctions externes qui produisent leurs résultats via un paramètre
Pointer*
(généralement
T**
pour un type d'objet
T
) ou un paramètre
void
**
.
out_ptr_t
capture des arguments supplémentaires lors de sa construction, fournit un stockage pour le résultat auquel une telle fonction étrangère susmentionnée écrit, et finalement réinitialise l'objet
Smart
adapté avec le résultat et les arguments capturés lorsqu'il est détruit.
out_ptr_t
se comporte comme s'il contenait les membres de données non statiques suivants :
-
une référence
Smart&, qui est liée à l'objet adapté lors de la construction, -
pour chaque
TdansArgs..., un membre de typeT, qui est un argument capturé lors de la construction et utilisé pour la réinitialisation lors de la destruction, et -
un sous-objet membre adapté au stockage d'un
Pointeret fournissant un objet void * , où lePointerou l'objet void * est généralement exposé à une fonction externe pour la réinitialisation.
Les utilisateurs peuvent contrôler si chaque argument pour la réinitialisation est capturé par copie ou par référence, en spécifiant un type d'objet ou un type de référence dans
Args...
respectivement.
Table des matières |
Paramètres du modèle
| Smart | - | le type de l'objet (généralement un pointeur intelligent) à adapter |
| Pointer | - | type de l'objet (généralement un pointeur brut) vers lequel une fonction externe écrit son résultat |
| Args... | - | type des arguments capturés utilisés pour réinitialiser l'objet adapté |
| Exigences de type | ||
-
Pointer
doit satisfaire aux exigences de
NullablePointer
.
|
||
-
Smart
est une spécialisation de
std::shared_ptr
et
sizeof...
(
Args
)
==
0
.
|
||
Spécialisations
Contrairement à la plupart des modèles de classe dans la bibliothèque standard,
les
spécialisations définies par le programme
de
out_ptr_t
qui dépendent d'au moins un
type défini par le programme
n'ont pas besoin de satisfaire aux exigences du modèle principal.
Cette licence permet à une spécialisation définie par le programme d'exposer le pointeur brut stocké dans un pointeur intelligent non standard à des fonctions externes.
Fonctions membres
|
(C++23)
|
construit un
out_ptr_t
(fonction membre publique) |
|
operator=
[supprimé]
(C++23)
|
out_ptr_t
n'est pas assignable
(fonction membre publique) |
|
(C++23)
|
réinitialise le pointeur intelligent adapté
(fonction membre publique) |
convertit le
out_ptr_t
en l'adresse du stockage pour la sortie
(fonction membre publique) |
Fonctions non membres
|
(C++23)
|
crée un
out_ptr_t
avec un pointeur intelligent associé et des arguments de réinitialisation
(modèle de fonction) |
Notes
out_ptr_t
s'attend à ce que les fonctions étrangères n'utilisent pas la valeur du pointeur
Pointer
, et seulement le réinitialisent. La valeur du pointeur intelligent avant l'adaptation n'est pas utilisée.
L'utilisation typique de
out_ptr_t
consiste à créer ses objets temporaires via
std::out_ptr
, ce qui réinitialise immédiatement le pointeur intelligent adapté. Par exemple, étant donnée une fonction mutatrice et un pointeur intelligent de type approprié déclarés avec
int
foreign_setter
(
T
**
)
;
et
std::
unique_ptr
<
T, D
>
up
;
respectivement,
int foreign_setter(T**); std::unique_ptr<T, D> up; if (int ec = foreign_setter(std::out_ptr(up))) return ec;
est approximativement équivalent à
int foreign_setter(T**); std::unique_ptr<T, D> up; T* raw_p{}; int ec = foreign_setter(&raw_p); up.reset(raw_p); if (ec != 0) return ec;
` et contient des termes spécifiques au C++ qui doivent être préservés. La structure HTML et les attributs ont été maintenus intacts conformément aux instructions.
Il n'est pas recommandé de créer un objet
out_ptr_t
ayant une
durée de stockage
autre que la durée de stockage automatique, car un tel code est susceptible de produire des références pendantes et d'entraîner un comportement indéfini lors de la destruction.
out_ptr_t
interdit l'utilisation qui réinitialiserait un
std::shared_ptr
sans spécifier un suppresseur, car cela appellerait
std::shared_ptr::reset
et remplacerait ultérieurement un suppresseur personnalisé.
Les arguments capturés sont généralement regroupés dans un
std::
tuple
<
Args...
>
. Les implémentations peuvent utiliser différents mécanismes pour fournir l'objet
Pointer
ou
void
*
qu'elles doivent contenir.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_out_ptr
|
202106L
|
(C++23) |
std::out_ptr
,
std::inout_ptr
|
202311L
|
(C++26) |
version autonome de
std::out_ptr
et
std::inout_ptr
|
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
(C++23)
|
interagit avec les définisseurs de pointeurs étrangers, obtient la valeur initiale du pointeur depuis un pointeur intelligent et le réinitialise lors de la destruction
(modèle de classe) |
|
(C++11)
|
pointeur intelligent avec sémantique de propriété exclusive d'objet
(modèle de classe) |
|
(C++11)
|
pointeur intelligent avec sémantique de propriété partagée d'objet
(modèle de classe) |