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) | средство удаления по умолчанию для unique_ptr (шаблон класса) |