std::experimental::scope_exit<EF>:: scope_exit
From cppreference.net
<
cpp
|
experimental
|
scope exit
|
template
<
class
Fn
>
explicit scope_exit ( Fn && fn ) noexcept ( /*see below*/ ) ; |
(1) | (library fundamentals TS v3) |
|
scope_exit
(
scope_exit
&&
other
)
noexcept
(
/*see below*/
)
;
|
(2) | (library fundamentals TS v3) |
|
scope_exit
(
const
scope_exit
&
)
=
delete
;
|
(3) | (library fundamentals TS v3) |
Создает
scope_exit
из функции, функционального объекта или другого
scope_exit
.
1)
Инициализирует функцию выхода с помощью функции или функционального объекта. Сконструированный
scope_exit
является активным.
Если
Fn
не является типом lvalue-ссылки и
std::
is_nothrow_constructible_v
<
EF, Fn
>
равно
true
, то сохранённый
EF
инициализируется с помощью
std::
forward
<
Fn
>
(
fn
)
; иначе он инициализируется с помощью
fn
.
Если инициализация сохраненного
EF
вызывает исключение, вызывает
fn
(
)
.
Эта перегрузка участвует в разрешении перегрузки только если
std::
is_same_v
<
std::
remove_cvref_t
<
Fn
>
, scope_exit
>
равно
false
и
std::
is_constructible_v
<
EF, Fn
>
равно
true
.
Программа является некорректной, если выражение вызова функции
fn
(
)
является некорректным.
Поведение не определено, если вызов
fn
(
)
вызывает исключение или приводит к неопределённому поведению, даже если
fn
не был вызван.
2)
Конструктор перемещения. Инициализирует хранимый
EF
значением из
other
. Созданный
scope_exit
активен тогда и только тогда, когда
other
был активен до создания.
Если
std::
is_nothrow_move_constructible_v
<
EF
>
равно
true
, инициализирует сохранённый
EF
(обозначаемый как
exitfun
) с помощью
std::
forward
<
EF
>
(
other.
exitfun
)
, в противном случае инициализирует его с помощью
other.
exitfun
.
После успешного перемещающего конструирования,
other.
release
(
)
вызывается и
other
становится неактивным.
Эта перегрузка участвует в разрешении перегрузки только если
std::
is_nothrow_move_constructible_v
<
EF
>
равно
true
или
std::
is_copy_constructible_v
<
EF
>
равно
true
.
Поведение не определено, если
-
std::
is_nothrow_move_constructible_v
<
EF
>
равно
true
и
EFне удовлетворяет требованиям MoveConstructible , или -
std::
is_nothrow_move_constructible_v
<
EF
>
равно
false
и
EFне удовлетворяет требованиям CopyConstructible .
Содержание |
Параметры
| fn | - |
функция или функциональный объект, используемый для инициализации хранимого
EF
|
| other | - |
scope_exit
для перемещения из
|
Исключения
Любое исключение, выброшенное во время инициализации сохраненного
EF
.
1)
noexcept
спецификация:
noexcept
(
std::
is_nothrow_constructible_v
<
EF, Fn
>
||
std:: is_nothrow_constructible_v < EF, Fn & > )
std:: is_nothrow_constructible_v < EF, Fn & > )
2)
noexcept
спецификация:
noexcept
(
std::
is_nothrow_move_constructible_v
<
EF
>
||
std:: is_nothrow_copy_constructible_v < EF > )
std:: is_nothrow_copy_constructible_v < EF > )
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
делает
scope_exit
неактивным
(публичная функция-член) |