std::experimental::scope_fail
| Определено в заголовочном файле <experimental/scope>
|
||
| template<class EF> class scope_fail; |
(ТС основы библиотеки v3) | |
Шаблон класса scope_fail представляет собой средство защиты области видимости общего назначения, предназначенное для вызова своей функции выхода, когда область видимости завершилась через исключение.
scope_fail не CopyConstructible, CopyAssignable или MoveAssignable, однако он может быть MoveConstructible, если EF соответствует некоторым требованиям, что позволяет заключить scope_fail в другой объект.
scope_fail может быть активным, т.е. вызывать функцию выхода при уничтожении, или неактивным, т.е. ничего не делать при уничтожении. scope_fail активен после создания из функции выхода.
scope_fail может стать неактивным, при вызове для него release() вручную или автоматически (конструктором перемещения). Неактивный scope_fail также может быть получен путём инициализации другим неактивным scope_fail. Если scope_fail неактивен, он не может снова стать активным.
scope_fail эффективно содержит EF и флаг bool, указывающий, активен ли он, вместе со счётчиком неперехваченных исключений, используемым для определения того, вызывается ли деструктор во время раскрутки стека.
Содержание |
[править] Параметры шаблона
| EF | — | тип сохранённой функции выхода |
| Требования к типам | ||
-EF должен быть:
| ||
| -Вызов левостороннего значения std::remove_reference_t<EF> без аргументов должен быть правильно сформирован. | ||
[править] Фукции-элементы
создаёт новый scope_fail (public функция-элемент) | |
вызывает функцию выхода при выходе из области видимости через исключение, если scope_fail активен, затем уничтожает scope_fail (public функция-элемент) | |
| operator= [удалено] |
scope_fail не присваиваемый (public функция-элемент) |
Модификаторы | |
делает scope_fail неактивным (public функция-элемент) | |
[править] Принципы вывода
[править] Примечание
Создание scope_fail длительности динамического хранения может привести к неожиданному поведению.
Создание scope_fail, созданного из другого scope_fail созданного в другом потоке, также может привести к неожиданному поведению, поскольку количество неперехваченных исключений, полученных в разных потоках, можно сравнить во время уничтожения.
[править] Пример
| Этот раздел не завершён Причина: нет примера |
[править] Смотрите также
| оборачивает объект функцию и вызывает его при выходе из области видимости (шаблон класса) | |
| обёртывает объект функцию и вызывает его при выходе из области видимости в обычном режиме (шаблон класса) | |
| (C++11) |
средство удаления по умолчанию для unique_ptr (шаблон класса) |