Si consideri il seguente codice:cattura oggetti eccezione per riferimento, provvisori, i problemi di durata
#include <iostream>
#include <stdexcept>
void foo()
{
throw std::runtime_error("How long do I live?");
}
int main()
{
try
{
foo();
}
catch (std::runtime_error& e)
{
std::cout << e.what() << std::endl;
}
}
Perché posso intercettare l'eccezione per riferimento, non è un std::runtime_error("How long do I live?")
rvalue?
Come mai l'oggetto eccezione è ancora attivo nel blocco catch?
Dove vengono memorizzati gli oggetti eccezionalmente memorizzati? Qual è la loro vita?
Il testo in grassetto non si riferisce all'oggetto temporaneo creato nell'espressione di lancio. Il fatto importante è che il meccanismo di lancio delle eccezioni ne fa una copia temporanea in alcune aree private, e quindi mantiene la copia in vita. La copia privata è ciò che ricevono gli handler. – bames53