catchブロックに入ると元の例外オブジェクトは消えているのに
受け取り先でその参照は生きています。これはコピーされているんですか?

try {
  std::exception e("auau");
  throw e;
} catch(std::exception &e) {
  std::cout << e.what() << std::endl;
}


また、tryブロックで作成したオブジェクトの、深い階層から例外を投げたときなど
catchブロックでreturnを書いても問題ありませんか?
(デストラクタが呼ばれてからcatchブロックへ移行しますか?)