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) | (desde C++23) |
|
operator
void
**
(
)
const
noexcept
;
|
(2) | (desde C++23) |
Expone la dirección de un
Pointer
o
void
*
objeto a una función externa que generalmente lo reinicializará.
Pointer
almacenado.
Pointer
no es igual a
void
*
, y el programa está mal formado si
Pointer
no es un tipo puntero.
El valor inicial del objeto void * es igual al valor del objeto almacenado
Pointer
convertido a
void
*
, y cualquier modificación a este afecta al valor
Pointer
utilizado en el
destructor
. Acceder al objeto
void
*
fuera del tiempo de vida de
*
this
tiene comportamiento indefinido.
Una vez que una de estas dos funciones de conversión ha sido llamada en un objeto
out_ptr_t
, la otra no debe ser llamada en él; de lo contrario, el comportamiento es indefinido.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
Pointer
almacenado.
Notas
Si el objeto apuntado por el valor de retorno no ha sido reescrito, es igual a nullptr .
En implementaciones comunes, la representación de objeto de cada
Pointer
que es un tipo puntero es compatible con la de
void
*
, y por lo tanto estas implementaciones típicamente almacenan el
void
*
objeto dentro del almacenamiento para el
Pointer
objeto, sin necesidad de almacenamiento adicional:
- Si la implementación habilita el análisis de alias basado en tipos (que depende de la regla estricta de aliasing ), puede utilizarse un subobjeto miembro std:: byte [ sizeof ( void * ) ] correctamente alineado, y ambas funciones de conversión devuelven la dirección de objetos creados implícitamente dentro del array.
-
De lo contrario, puede utilizarse un subobjeto miembro
Pointerpara ambas funciones de conversión, y (2) puede devolver directamente su dirección mediante reinterpret_cast a void ** .
Si
Pointer
es un tipo puntero cuya representación de objeto es incompatible con la de
void
*
, puede ser necesario un indicador adicional
bool
para registrar si
(1)
(o
(2)
) ha sido llamado.
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |