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, вызывающего функцию выхода. Это может привести к неожиданному поведению.
Пример
| Этот раздел не завершён Причина: нет примера |
Смотрите также
| обёртывает объект функцию и вызывает его при выходе из области видимости через исключение (шаблон класса) | |
| обёртывает объект функцию и вызывает его при выходе из области видимости в обычном режиме (шаблон класса) | |
(C++11) |
средство удаления по умолчанию для std::unique_ptr (шаблон класса) |