std::inout_ptr_t<Smart,Pointer,Args...>:: ~inout_ptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
inout_ptr_t::~inout_ptr_t
|
||||
| Non-member functions | ||||
|
~inout_ptr_t
(
)
;
|
(начиная с C++23) | |
Сбрасывает адаптированный объект
Smart
значением модифицированного объекта
Pointer
(или объекта
void
*
если был вызван
operator
void
**
(
)
) и захваченными аргументами.
release
(
)
может быть вызван на адаптированном объекте
Smart
если он не был вызван конструктором.
Пусть
-
sобозначает адаптированный объектSmart, -
args...обозначает захваченные аргументы, -
pобозначает значение сохраненногоPointer, или static_cast < Pointer > ( * operator void ** ( ) ) если был вызван operator void ** , -
SPявляется- Smart :: pointer , если это валидно и обозначает тип, иначе,
- Smart :: element_type * , если Smart :: element_type валидно и обозначает тип, иначе,
- std:: pointer_traits < Smart > :: element_type * , если std:: pointer_traits < Smart > :: element_type валидно и обозначает тип, иначе,
-
Pointer,
- /*do-release*/ обозначает s. release ( ) если конструктор не вызывает release ( ) , пусто в противном случае.
Если
Smart
является типом указателя, деструктор выполняет
- s = static_cast < Smart > ( p ) ; , и программа является некорректной, если sizeof... ( Args ) > 0 ;
в противном случае, если s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) является корректным выражением, деструктор выполняет
- /*do-release*/ ; if ( p ) { s. reset ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
в противном случае, если std:: is_constructible_v < Smart, SP, Args... > равно true , деструктор выполняет
- /*do-release*/ ; if ( p ) { s = Smart ( static_cast < SP > ( p ) , std:: forward < Args > ( args ) ... ) ; } ;
в противном случае программа является некорректной.
Примечания
Реализация может выделять память для структуры данных, необходимой для
Smart
(например, контрольного блока), при создании, чтобы оставить нетривиальные операции деструктору.
Аргументы, захваченные по значению, уничтожаются после сброса.
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3897 | C++23 | деструктор не обновлял сырой указатель до нулевого значения | обновляет |