std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::~inout_ptr_t
|
||||
| Non-member functions | ||||
|
~inout_ptr_t
(
)
;
|
(desde C++23) | |
Restablece el objeto adaptado
Smart
mediante el valor del objeto modificado
Pointer
(o el objeto
void
*
si se ha llamado a
operator
void
**
(
)
) y los argumentos capturados.
release
(
)
puede llamarse en el objeto adaptado
Smart
si no es llamado por el constructor.
Sea
-
sdenota el objetoSmartadaptado, -
args...denota los argumentos capturados, -
pdenota el valor almacenado dePointer, o static_cast < Pointer > ( * operator void ** ( ) ) si se ha llamado a operator void ** , -
SPserá- Smart :: pointer , si es válido y denota un tipo, en caso contrario,
- Smart :: element_type * , si Smart :: element_type es válido y denota un tipo, en caso contrario,
- std:: pointer_traits < Smart > :: element_type * , si std:: pointer_traits < Smart > :: element_type es válido y denota un tipo, en caso contrario,
-
Pointer,
- /*do-release*/ denota s. release ( ) si el constructor no llama a release ( ) , vacío en caso contrario.
Si
Smart
es un tipo puntero, el destructor ejecuta
- s = static_cast < Smart > ( p ) ; , y el programa está mal formado si sizeof... ( Args ) > 0 ;
de lo contrario, si s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) está bien formado, el destructor realiza
- /*do-release*/ ; if ( p ) { s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
de lo contrario, si std:: is_constructible_v < Smart, SP, Args... > es true , el destructor realiza
- /*do-release*/ ; if ( p ) { s = Smart ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
de lo contrario, el programa está mal formado.
Notas
La implementación puede asignar el almacenamiento para la estructura de datos necesaria para
Smart
(por ejemplo, un bloque de control) durante la construcción, para dejar las operaciones que no lanzan excepciones al destructor.
Los argumentos capturados por valor se destruyen después de reiniciar.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3897 | C++23 | el destructor no actualizaba un puntero crudo al valor nulo | sí lo hace |