MEC++: lanciare un'eccezione

Appunti tratti dalla rilettura di More Effective C++ di Scott Meyers. Terzo blocco: Eccezioni.

(12) Lanciare un'eccezione, passare parametri, chiamare una funzione virtuale

In un certo senso, la clausola catch ricorda la dichiarazione di una funzione. In realtà, a parte il fatto che in entrambi i casi c'é un passaggio di un parametro, le situazioni sono ben diverse.

In primo luogo nel caso di eccezione si passa dal contesto in cui l'eccezione é generata a quello in cui viene gestita, senza poi ritornare al chiamante.

Notiamo la differenza tra questi due modi di gestire un'eccezione e poi propagarla:

catch(Widget& w)
{
// ...

throw;
}

catch(Widget& w)
{
// ...

throw w;
}

Nel primo caso dopo aver trattato l'eccezione, questa viene propagata direttamente. Nel secondo caso, ne viene creata una copia. Dunque, in generale, si preferisce la prima alternativa, che risparmia il costo della copia dell'oggetto eccezione.

Nessun commento:

Posta un commento