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 (шаблон класса) |