// ( o17.C ) // オブジェクト生成時の作成チェック // #include // オブジェクトを生成する時に、本当に作成してよいか // 調べてから、良ければ作成したい場合がある。残念な // がらC++では、その機構が用意されていない。何ら // かの工夫が必要になる。 class N { int num ; public: static int status ; // 作成されたかどうかを判定するために設けてある。 public: N( int i ) { if ( i==0 ) { cout << "Not create Object\n" ; status = -1 ; delete this ; } else { cout << "Create Object\n" ; status = 0 ; num = i ; } } ~N() { cout << "delete N\n" ; } void show() { cout << "N : " << num << endl ; } } ; void main() { N* n = new N(0) ; if ( N::status == -1 ) { cout << "作成できなかった\n" ; } else { cout << "作成できました\n" ; n->show(); } // delete n ; n->show() ; これらもちゃんと反応してしまう。しかし実際には // ポインタは不定になっているはずなので、使っては // いけないと思う。 } /* [結果] オブジェクトは作成しない delete N 作成できませんでした [この方法ではうまく働かない] class N { public: N( int i ) { if ( i==0 ) delete this ; } ~N() { this = NULL ; } } ; void main() { N* n = new N(0) ; if ( n == NULL ) { cout << "作成できなかった\n" ; } else { cout << "作成できました\n" ; } } */