Espacios de nombres
Variantes

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

De cppreference.com
 
 
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)
 
 
<tbody> </tbody>
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 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 out_ptr_t, no se llamará a la otra, de lo contrario, el comportamiento no está definido.

Parámetros

(Ninguno)

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.

Notas

Si el objeto al que apunta el valor devuelto 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 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.

Ejemplo