c++におけるコンストラクタとデストラクタの例外
コード例
#include <iostream> using namespace std; class Base { public: Base() { cout << "Base Constructor" << endl; } ~Base() { cout << "Base Destructor" << endl; } private: }; class Sub : public Base { public: Sub() { cout << "Sub Constructor" << endl; throw 1; } ~Sub() { cout << "Sub Destructor" << endl; } private: }; int main() { Sub* o1 = NULL; Sub* o2 = NULL; try { o1 = new Sub; o2 = new Sub; delete o1; delete o2; return 0; } catch(int e) { cout << "Exception: " << e << endl; delete o1; delete o2; throw; } }
何が起こるか?
- コンストラクタで例外を投げると、