Salve,
se ho capito il suo dubbio potrebbe provare ad inserire dei messaggi da stampare su output nel costruttore di copia e nel distruttore di una classe e sfruttare il fatto che quando viene eseguito il throw viene inizializzato tramite copia un oggetto temporaneo che poi viene passato come argomento al catch corrispondente. Se quest'ultimo lo riceve per copia e non per riferimento verrà chiamato nuovamente il costruttore di copia. Ad esempio un codice come
#include <iostream>
using namespace std;
struct A
{
A () {}
A(const A &) {cout << "costruttore di copia\n";}
~A() {cout << "distruttore\n";}
};
int main()
{
try{
A a;
throw a;
}
catch(A b) {cout << "catch\n";}
cout << "nel main\n";
}
può vedere l'ordine in cui vengono chiamati costruttore di copia e distruttore.
L'output che si ottiene è questo
costruttore di copia
distruttore
costruttore di copia
catch
distruttore
distruttore
nel main
da cui si può evincere che viene
1) lanciata l'eccezione
2) chiamato il distruttore di a
3catturata l'eccezione inizializzando per copia b
4) etc...
Sperando di esserle stato utile ed aver compreso la sua richiesta, la saluto.