// new ClassT と動的メモリを確保した際、確保されたオブジェクトの // コンストラクタは呼ばれるのか ? #include <iostream> using namespace std; class Foo { public: Foo( ) { cout << "I'm Constructor" << endl ; }; virtual ~Foo( ) { ; }; }; int main( ) { Foo *p = new Foo ; // VC6(SP3) は new で失敗しても // ANSI/ISO C++ で定めた動き(bad_alloc をスロー)はせず、 // 古典的に NULL ポインタを返す if ( p == NULL ) { cout << "bad_alloc" << endl ; } else { cout << "success!" << endl; } return 0; } /* 1. はい。呼ばれます。 2. §5.3.3@ARM より、 > クラスがコンストラクタを持つならば、コンストラクタへの引数が > 適切に与えられるか、あるいはクラスがデフォルト・コンストラクタ > を持つ場合だけ、new によってそのクラスのオブジェクトを作成できる。 */ // end of file