std::exception_ptr
ÐаÑеÑиал из cppreference.com
![]() |
ÐÑа ÑÑÑаниÑа бÑла пеÑеведена авÑомаÑиÑеÑки Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкой веÑÑии вики иÑполÑзÑÑ ÐеÑеводÑик Google. ÐеÑевод Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ñибки и ÑÑÑаннÑе ÑоÑмÑлиÑовки. ÐаведиÑе кÑÑÑÐ¾Ñ Ð½Ð° ÑекÑÑ, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ Ð¾Ñигинал. ЩÑлкниÑе здеÑÑ, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ Ð°Ð½Ð³Ð»Ð¸Ð¹ÑкÑÑ Ð²ÐµÑÑÐ¸Ñ ÑÑой ÑÑÑаниÑÑ. (ÐÑ Ð¼Ð¾Ð¶ÐµÑе помоÑÑ Ð² иÑпÑавлении оÑибок и ÑлÑÑÑении пеÑевода. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий пеÑейдиÑе по ÑÑÑлке.) |
ÐпÑеделено в заголовоÑном Ñайле <exception>
|
||
typedef /*unspecified*/ exception_ptr; |
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) | |
std::exception_ptr
ÑвлÑеÑÑÑ Ð¾Ð±Ð½ÑлÑемого ÑказаÑелÑ, как Ñипа, коÑоÑÑй ÑпÑавлÑÐµÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа, коÑоÑÑй бÑл бÑоÑен и заÑ
ваÑил Ñ std::current_exception. ÐкземплÑÑ std::exception_ptr
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑедана дÑÑгой ÑÑнкÑии, возможно, на дÑÑгой поÑок, в коÑоÑом иÑклÑÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзвано повÑоÑно и обÑабаÑÑваеÑÑÑ Ñ Ñловом пÑнкÑа.ÐÑигинал:
std::exception_ptr
is a nullable pointer-like type that manages an exception object which has been thrown and captured with std::current_exception. An instance of std::exception_ptr
may be passed to another function, possibly on another thread, where the exception may be rethrown and handled with a catch clause.ТекÑÑ Ð±Ñл пеÑеведÑн авÑомаÑиÑеÑки иÑполÑзÑÑ ÐеÑеводÑик Google.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ÑÑÑоеннÑÑ
std::exception_ptr
ÑвлÑеÑÑÑ Ð½ÑлевÑм ÑказаÑелем, она не ÑказÑÐ²Ð°ÐµÑ Ð½Ð° обÑÐµÐºÑ Ð¸ÑклÑÑениÑ.ÐÑигинал:
Default-constructed
std::exception_ptr
is a null pointer, it does not point to an exception object.ТекÑÑ Ð±Ñл пеÑеведÑн авÑомаÑиÑеÑки иÑполÑзÑÑ ÐеÑеводÑик Google.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
Ðва ÑкземплÑÑа
std::exception_ptr
ÑавнÑми ÑолÑко Ñогда, когда они оба нÑлевÑе или оба ÑоÑки, в ÑÐ¾Ñ Ð¶Ðµ обÑÐµÐºÑ Ð¸ÑклÑÑениÑ.ÐÑигинал:
Two instances of
std::exception_ptr
compare equal only if they are both null or both point at the same exception object.ТекÑÑ Ð±Ñл пеÑеведÑн авÑомаÑиÑеÑки иÑполÑзÑÑ ÐеÑеводÑик Google.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
std::exception_ptr
не неÑвно пÑеобÑазовÑваÑÑÑÑ Ð² лÑбÑе аÑиÑмеÑиÑеÑкие, пеÑеÑиÑление или Ñип ÑказаÑелÑ. ÐÑо, конвеÑÑиÑÑемÑÑ
в bool
.ÐÑигинал:
std::exception_ptr
is not implicitly convertible to any arithmetic, enumeration, or pointer type. It is convertible to bool
.ТекÑÑ Ð±Ñл пеÑеведÑн авÑомаÑиÑеÑки иÑполÑзÑÑ ÐеÑеводÑик Google.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
ÐÑклÑÑение обÑекÑа на коÑоÑÑй ÑÑÑлаеÑÑÑ
std::exception_ptr
оÑÑаеÑÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑм до ÑеÑ
поÑ, пока оÑÑаеÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð½Ð° std::exception_ptr
, коÑоÑÑе на него ÑÑÑлаÑÑÑÑ: std::exception_ptr
ÑвлÑеÑÑÑ Ð¾Ð±Ñей ÑобÑÑвенноÑÑи ÑмаÑÑ-ÑказаÑелÑ.ÐÑигинал:
The exception object referenced by an
std::exception_ptr
remains valid as long as there remains at least one std::exception_ptr
that is referencing it: std::exception_ptr
is a shared-ownership smart pointer.ТекÑÑ Ð±Ñл пеÑеведÑн авÑомаÑиÑеÑки иÑполÑзÑÑ ÐеÑеводÑик Google.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¸ иÑпÑавиÑÑ Ð¿ÐµÑевод. ÐÐ»Ñ Ð¸Ð½ÑÑÑÑкÑий ÑÑлкниÑе ÑÑда.
[пÑавиÑÑ] ÐÑимеÑ
ÐапÑÑÑиÑÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´
#include <iostream> #include <string> #include <exception> #include <stdexcept> void handle_eptr(std::exception_ptr eptr) // passing by value is ok { try { if (eptr != std::exception_ptr()) { std::rethrow_exception(eptr); } } catch(const std::exception& e) { std::cout << "Caught exception \"" << e.what() << "\"\n"; } } int main() { std::exception_ptr eptr; try { std::string().at(1); // this generates an std::out_of_range } catch(...) { eptr = std::current_exception(); // capture } handle_eptr(eptr); } // destructor for std::out_of_range called here, when the eptr is destructed
ÐÑвод:
Caught exception "basic_string::at"
[пÑавиÑÑ] См. Ñакже
(C++11) |
ÑоздаÑÑ std::exception_ptr из обÑекÑа иÑклÑÑÐµÐ½Ð¸Ñ (Ñаблон ÑÑнкÑии) |
(C++11) |
ÑикÑиÑÑÐµÑ ÑекÑÑее иÑклÑÑение в std::exception_ptr (ÑÑнкÑиÑ) |
(C++11) |
бÑоÑÐ°ÐµÑ Ð¸ÑклÑÑение из std::exception_ptr (ÑÑнкÑиÑ) |