Пространства имён
Варианты
Действия

std::experimental::scope_success

Материал из cppreference.com
 
 
Технические спецификации
Библиотека файловой системы (ТС файловой системы)
Основы библиотеки (ТС основ библиотеки)
Основы библиотеки 2 (ТС основ библиотеки v2)
Основы библиотеки 3 (ТС основы библиотеки v3)
Расширения для параллелизма (ТС параллелизма)
Расширения для параллелизма 2 (ТС параллелизма v2)
Расширения для конкуренции 2 (ТС конкуренции v2)
Концепты (ТС концепций)
Диапазоны (ТС диапазонов)
Рефлексия (ТС рефлексии)
Специальные математические функции (ТО специальные функции)
 
 
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, вызывающего функцию выхода. Это может привести к неожиданному поведению.

[править] Пример

[править] Смотрите также

оборачивает объект функцию и вызывает его при выходе из области видимости
(шаблон класса) [править]
обёртывает объект функцию и вызывает его при выходе из области видимости через исключение
(шаблон класса) [править]
средство удаления по умолчанию для unique_ptr
(шаблон класса) [править]