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