2

私のクラスのコンストラクターは、何らかの条件をチェックします。場合によっては、オブジェクトの作成を中断する必要があります。デストラクタを配置する必要がありますか、それともステートメントを返すだけですか?

次のようになります。

コードのどこかに:

new Obj( string );

そして私のコンストラクタ:

Obj::Obj( string ) {
    if( string == "something" ) {
        // should I put this here or only return?
        Obj::~Obj();
        return;
    }
    // ...
}

オブジェクトの作成前に状態を確認できることはわかっていますが、実行時にクラッシュすることなく適切にコンパイルされるため、正しいかどうか (メモリ リークがない場合) は気になります。

4

2 に答える 2

10

どちらも、例外をスローする必要があります。

オブジェクトは作成されません。これは、この種の状況に対処する慣用的な方法です。

呼び出しコンテキスト (またはそれ以上) で例外を処理する必要があります。

Obj::Obj( string ) {
    if( string == "something" ) {
        // should I put this here or only return?
        throw ObjectCouldNotBeCreatedException();
    }
}
于 2012-07-31T19:13:06.503 に答える
4

returnステートメントは引き続きオブジェクトを作成します。構築を中断するには、代わりに例外をスローする必要があります。

于 2012-07-31T19:14:30.263 に答える