Пространства имён
Варианты
Действия

std::experimental::scope_exit

Материал из cppreference.com
 
 
Технические спецификации
Библиотека файловой системы(ТС файловой системы)
Основы библиотеки(ТС основ библиотеки)
Основы библиотеки 2(ТС основ библиотеки v2)
Основы библиотеки 3(ТС основы библиотеки v3)
Расширения для параллелизма(ТС параллелизма)
Расширения для параллелизма 2(ТС параллелизма v2)
Расширения для конкуренции 2(ТС конкуренции v2)
Концепты(ТС концепций)
Диапазоны(ТС диапазонов)
Рефлексия(ТС рефлексии)
Специальные математические функции(ТО специальные функции)
 
 
std::experimental::scope_exit
 
Определено в заголовочном файле <experimental/scope>
template<class EF>
class scope_exit;
(ТС основы библиотеки v3)

Шаблон класса scope_exit представляет собой средство защиты области видимости общего назначения, предназначенное для вызова своей функции выхода, когда область видимости завершилась.

scope_exit не CopyConstructible, CopyAssignable или MoveAssignable, однако он может быть MoveConstructible, если EF соответствует некоторым требованиям, что позволяет заключить scope_exit в другой объект.

scope_exit может быть активным, т.е. вызывать функцию выхода при уничтожении, или неактивным, т.е. ничего не делать при уничтожении. scope_exit активен после создания из функции выхода.

scope_exit может стать неактивным, при вызове для него release() вручную или автоматически (конструктором перемещения). Неактивный scope_exit также может быть получен путём инициализации другим неактивным scope_exit. Если scope_exit неактивен, он не может снова стать активным.

scope_exit эффективно содержит EF и флаг bool, указывающий, активен ли он.

Содержание

[править]Параметры шаблона

EF тип сохранённой функции выхода
Требования к типам
-
EF должен быть:
-
Вызов левостороннего значения std::remove_reference_t<EF> без аргументов должен быть правильно сформирован.

[править]Фукции-элементы

создаёт новый scope_exit
(public функция-элемент)[править]
вызывает функцию выхода при выходе из области видимости, если scope_exit активен, затем уничтожает scope_exit
(public функция-элемент)[править]
operator=
[удалено]
scope_exit не присваиваемый
(public функция-элемент)
Модификаторы
делает scope_exit неактивным
(public функция-элемент)[править]

[править]Принципы вывода

[править]Примечание

Создание scope_exit длительности динамического хранения может привести к неожиданному поведению.

Если EF, хранящийся в объекте scope_exit, ссылается на локальную переменную функции, в которой он определён, например, как лямбда, захватывающая переменную по ссылке, и эта переменная используется в качестве операнда возврата в этой функции, эта переменная могла уже быть возвращена при выполнении деструктора scope_exit, вызывающего функцию выхода. Это может привести к неожиданному поведению.

[править]Пример

[править]Смотрите также

обёртывает объект функцию и вызывает его при выходе из области видимости через исключение
(шаблон класса)[править]
обёртывает объект функцию и вызывает его при выходе из области видимости в обычном режиме
(шаблон класса)[править]
средство удаления по умолчанию для unique_ptr
(шаблон класса)[править]
close