std::inout_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::operator Pointer*
inout_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 liberará la propiedad representada por su valor y luego 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 se ha llamado a una de estas dos funciones de conversión en un objeto
inout_ptr_t
, la otra no debe ser llamada sobre é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 al valor contenido por el objeto adaptado
Smart
antes de la construcción.
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 normalmente 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.
-
En caso 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 |