Namespaces
Variants

std:: exception_ptr

From cppreference.net
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

crée un std::exception_ptr à partir d'un objet exception
(modèle de fonction)
capture l'exception courante dans un std::exception_ptr
(fonction)
relance l'exception depuis un std::exception_ptr
(fonction)