std:: exception_ptr
|
Défini dans l'en-tête
<exception>
|
||
|
using
exception_ptr
=
/*unspecified*/
|
(depuis C++11) | |
std::exception_ptr
est un type similaire à un pointeur nullable qui gère un objet d'exception ayant été lancé et capturé avec
std::current_exception
. Une instance de
std::exception_ptr
peut être passée à une autre fonction, potentiellement dans un autre thread, où l'exception peut être relancée et traitée avec une clause
catch
.
Un objet
std::exception_ptr
construit par défaut
est un pointeur nul ; il ne pointe vers aucun objet d'exception.
Deux instances de
std::exception_ptr
sont égales uniquement si elles sont toutes deux nulles ou pointent vers le même objet d'exception.
std::exception_ptr
n'est pas implicitement convertible en aucun type arithmétique, énumération ou pointeur. Il est contextuellement convertible en
bool
, et évaluera à
false
s'il est nul,
true
sinon.
L'objet exception référencé par un
std::exception_ptr
reste valide tant qu'il reste au moins un
std::exception_ptr
qui le référence :
std::exception_ptr
est un pointeur intelligent à propriété partagée (note : ceci s'ajoute aux
règles habituelles de durée de vie des objets exception
).
std::exception_ptr
satisfait aux exigences de
NullablePointer
.
Exemple
#include <exception> #include <iostream> #include <stdexcept> #include <string> void handle_eptr(std::exception_ptr eptr) // passing by value is OK { try { if (eptr) std::rethrow_exception(eptr); } catch(const std::exception& e) { std::cout << "Caught exception: '" << e.what() << "'\n"; } } int main() { std::exception_ptr eptr; try { [[maybe_unused]] char ch = std::string().at(1); // this generates a 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
Sortie possible :
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
Voir aussi
|
(C++11)
|
crée un
std::exception_ptr
à partir d'un objet exception
(modèle de fonction) |
|
(C++11)
|
capture l'exception courante dans un
std::exception_ptr
(fonction) |
|
(C++11)
|
relance l'exception depuis un
std::exception_ptr
(fonction) |