戻り値の型としてオブジェクト型を持つメンバー関数があります。
MyObject myfunction(parameters) {
if (some condition) {
return MyObject(parameters);
} else {
... no valid object can be created ...
}
}
特定の条件下(関数本体でチェックされている)では、タイプMyObjectのオブジェクトを作成して返すことはできません。
たまにC++プログラマーになるだけで、私は自発的に3つの解決策を思いつくことができます。
- 戻り値の型を*MyObjectに変更し、有効なオブジェクトを作成できない場合はnullptrを返し(C ++ 11)、呼び出し元のコードでnullptrと等しいかどうかを確認します。
- オブジェクトを作成できない場合に例外をスローし、呼び出し元のコードでそのオブジェクトをキャッチします。
- 無効と定義したいくつかの値を使用してオブジェクトを作成し、返されたオブジェクトを使用する前にそれを確認します。
このような状況に対処するための標準的な方法と、パフォーマンスの観点からの最善の解決策は何でしょうか。...または私が見ないいくつかの明らかな回避策...
最先端のC++11ソリューションが最適です:-)
これまでの私の考え:
ソリューション1は問題ないようですが、C ++ 11のみであり、メインプログラムに渡す(オブジェクト自体を呼び出し元の関数に返す)には、返されたオブジェクトをヒープ上に作成する必要があります。 、したがって、スタックに保持する方が小さなオブジェクトの方が速いかもしれませんか?)
解決策2は遅くなる可能性があり、メインプログラムでの冗長なコーディングにつながります。
解決策3はおそらく最も遅く(オブジェクトが無駄に作成される)、メインプログラムでチェックするのにあまり便利ではありません。
私のコードでは、有効な戻りオブジェクトは例外ではなくデフォルトの状況であり、作成されたオブジェクトはかなり小さいですが、さまざまなケースを考慮した一般的な考慮事項は、他の読者のアプリケーションにとって確かに役立ちます...
助けてくれてありがとう:-)