Espacios de nombres
Variantes
Acciones

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

De cppreference.com
< cpp‎ | memory‎ | inout ptr t
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
std::inout_ptr_t
Funciones miembro
inout_ptr_t::operator Pointer*inout_ptr_t::operator void**
(C++23)(C++23)
Funciones no miembro
(C++23)
 
operator Pointer*() const noexcept;
(1) (desde C++23)
operator void**() const noexcept;
(2) (desde C++23)

Expone la dirección de un objeto Pointer o void* a una función externa que generalmente liberará la propiedad representada por su value 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 lo mismo que 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 Pointer almacenado, convertido a void*, y cualquier modificación en él afecta el valor de Pointer utilizado en el destructor. Acceder al objeto void* fuera del tiempo de vida de *this tiene un comportamiento no definido.

Una vez que se ha llamado a una de estas dos funciones de conversión en un objeto inout_ptr_t, no se llamará a la otra, de lo contrario, el comportamiento no está definido.

Contenido

[editar] Parámetros

(Ninguno)

[editar] Valor de retorno

1) La dirección del objeto Pointer almacenado.
2) La dirección del objeto void* que cumpla con los requerimientos antes mencionados.

[editar] Notas

Si el objeto al que apunta el valor devuelto no ha sido reescrito, es igual al valor retenido por el objeto Smart adaptado 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 un objeto void* dentro del almacenamiento para el objeto Pointer. No se necesita almacenamiento adicional:

  • Si la implementación permite el análisis de alias basado en tipos (que se basa en la estricta regla de alias), puede usarse un subobjeto miembro std::byte[sizeof(void*)] apropiadamente alineado, y ambas funciones de conversión devuelven la dirección de los objetos creados implícitamente dentro del array.
  • De lo contrario, puede usarse un subobjeto miembro Pointer para ambas funciones de conversión, y (2) puede devolver directamente su dirección de reinterpret_cast a void**.

Si Pointer es un tipo puntero cuya representación de objeto es incompatible con la de void*, es posible que se necesite un indicador bool adicional para registrar si (1) (o (2)) ha sido llamada.

[editar] Ejemplo