captura de objetos de excepción por referencia, temporarios, problemas de por vida
Considere el siguiente código:
#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;
}
}
¿Por qué puedo capturar la excepción por referencia, no esstd::runtime_error("How long do I live?")
un valor?
¿Por qué el objeto de excepción sigue vivo en el bloque catch?
¿Dónde exactamente se lanzan los objetos de excepción almacenados? ¿Cuál es su vida?