Namespaces
Variants

std::inout_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>:: operator void**

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)
std::inout_ptr_t
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á.

1) Convierte * this a la dirección del objeto Pointer almacenado.
2) Convierte * this a la dirección de un objeto void * . Esta función de conversión participa en la resolución de sobrecarga solo si 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

1) La dirección del objeto Pointer almacenado.
2) La dirección del objeto void * que satisface los requisitos mencionados anteriormente.

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 Pointer para 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