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

std::exception_ptr

Материал из cppreference.com
< cpp‎ | error
 
 
Библиотека диагностики
Обработка исключений
exception_ptr
(C++11)
Сбои обработки исключений
(до C++17*)
(до C++17*)
(C++11)(до C++17*)    
(до C++17*)
Коды ошибок
Коды ошибок
Категории исключений
(ТС TM)
Поддержка системных ошибок
(C++11)
(C++11)
Утверждения
Трассировка стека
 
Определено в заголовочном файле <exception>
typedef/*не указано*/ exception_ptr;
(начиная с C++11)

std::exception_ptr это тип, подобный указателю, допускающий нулевое значение, который управляет объектом исключения, сгенерированным и захваченным с помощью std::current_exception. Экземпляр std::exception_ptr может быть передан другой функции, возможно, в другом потоке, где исключение может быть сгенерировано повторно и обработано с помощью предложения catch.

Созданный по умолчанию std::exception_ptr является нулевым указателем; он не указывает на объект исключения.

Два экземпляра std::exception_ptr при сравнении равны, только если они оба имеют значение null или оба указывают на один и тот же объект исключения.

std::exception_ptr не может быть неявно преобразован ни в какой арифметический, перечисляемый или указательный тип. Он контекстуально преобразуется в bool и будет оцениваться как false, если он нулевой, иначе как true.

Объект исключения, на который ссылается std::exception_ptr, остаётся действительным до тех пор, пока остаётся хотя бы один std::exception_ptr, ссылающийся на него: std::exception_ptr это умный указатель с общим владением (примечание: это дополнение к обычным правилам времени жизни объекта исключения).

std::exception_ptr соответствует требованиям NullablePointer.

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

#include <exception>#include <iostream>#include <stdexcept>#include <string>   void handle_eptr(std::exception_ptr eptr)// передача по значению правильна{try{if(eptr)std::rethrow_exception(eptr);}catch(conststd::exception& e){std::cout<<"Поймано исключение: '"<< e.what()<<"'\n";}}   int main(){ std::exception_ptr eptr;   try{std::string().at(1);// это генерирует std::out_of_range}catch(...){ eptr =std::current_exception();// захват}   handle_eptr(eptr);   }// здесь вызывается деструктор для std::out_of_range,// когда уничтожается eptr

Возможный вывод:

Поймано исключение: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'

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

создаёт std::exception_ptr из объекта исключения
(шаблон функции)[править]
фиксирует текущее исключение в std::exception_ptr
(функция)[править]
генерирует исключение из std::exception_ptr
(функция)[править]
close