std::inout_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>::operator void**
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á.
*this a la dirección del objeto Pointer almacenado.*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.
Parámetros
(Ninguno)
Valor de retorno
Pointer almacenado.void* que cumpla con los requerimientos antes mencionados.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
Pointerpara ambas funciones de conversión, y (2) puede devolver directamente su dirección de reinterpret_cast avoid**.
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
| Esta sección está incompleta Razón: sin ejemplo |