C++ ランゲージクイックリファレンスを読んでいて見つけました。
コンストラクタ内で例外を補足し、中途半場に構築してしまったりソースの後始末をしたい場合は次のように書けるようです。
Artist::Artist() try : m_name(0), m_image(0) { m_name = new Name("Fabio Lione"); m_image = new Image("fabio_lione.png"); } catch (...) { delete m_name; delete m_image; }
デバッガで追いかけたところ、 Artist クラスのコンストラクタ内で例外が送出された場合に Name クラスと Image クラスのデストラクタが呼ばれることを確認しました。
このネタ、論争になりやすいそうなので、良い記述を見つけたと思いました。
Contributions