std::out_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
out_ptr_t::operator Pointer*
out_ptr_t::operator void**
|
||||
| Non-member functions | ||||
|
operator Pointer
*
(
)
const
noexcept
;
|
(1) | (depuis C++23) |
|
operator
void
**
(
)
const
noexcept
;
|
(2) | (depuis C++23) |
Expose l'adresse d'un
Pointer
ou d'un objet
void
*
à une fonction externe qui va généralement le réinitialiser.
Pointer
stocké.
Pointer
n'est pas identique à
void
*
, et le programme est mal formé si
Pointer
n'est pas un type pointeur.
La valeur initiale de l'objet void * est égale à la valeur de l'objet
Pointer
stocké converti en
void
*
, et toute modification de celui-ci affecte la valeur
Pointer
utilisée dans le
destructeur
. L'accès à l'objet
void
*
en dehors de la durée de vie de
*
this
a un comportement indéfini.
Une fois que l'une de ces deux fonctions de conversion a été appelée sur un objet
out_ptr_t
, l'autre ne doit pas être appelée sur celui-ci, sinon, le comportement est indéfini.
Table des matières |
Paramètres
(aucun)
Valeur de retour
Pointer
stocké.
Notes
Si l'objet pointé par la valeur de retour n'a pas été réécrit, il est égal à nullptr .
Sur les implémentations courantes, la représentation objet de chaque
Pointer
qui est un type pointeur est compatible avec celle de
void
*
, et par conséquent ces implémentations stockent typiquement l'objet
void
*
dans le stockage de l'objet
Pointer
, sans besoin de stockage supplémentaire :
- Si l'implémentation active l'analyse d'alias basée sur les types (qui repose sur la règle de strict aliasing ), un sous-objet membre std:: byte [ sizeof ( void * ) ] correctement aligné peut être utilisé, et les deux fonctions de conversion retournent l'adresse d'objets implicitement créés dans le tableau.
-
Sinon, un sous-objet membre
Pointerpeut être utilisé pour les deux fonctions de conversion, et (2) peut retourner directement son adresse reinterpret_cast en void ** .
Si
Pointer
est un type pointeur dont la représentation objet est incompatible avec celle de
void
*
, un indicateur
bool
supplémentaire peut être nécessaire pour enregistrer si
(1)
(ou
(2)
) a été appelé.
Exemple
|
Cette section est incomplète
Motif : aucun exemple |