これは奇妙な質問のように思えるかもしれません。現在、特定のオブジェクトを2ステップから1ステップの初期化スキームに移動しています。基本的に、.initialize()
.terminate()
メンバー関数で行われたことをコンストラクタとデストラクタに移動します。
私の問題は、これらのクラスが外部要因に依存する特定の属性を正しく初期化したかどうかを知ることが重要であるということです。
例として、WinAPIウィンドウを作成するWindowクラスがあります。以前は2ステップのメソッドを使用してinitialize()
いたので、ウィンドウが適切に作成されたかどうかのブール値を返していました。
if(myWindow.initialize())
{
// proceed with application
}
else
{
// exit
}
とにかく、コンストラクターからこの情報を中継するために、次のような2番目のメソッドを作成して呼び出す必要はありdidMyWindowInitializeCorrectly()
ませんか?
最初、私はの線に沿って何かを望んでいました
if(Window *myWindow = new Window)
{
// proceed with application
}
else
{
// exit
}
ただし、ウィンドウの作成に失敗してもWindowオブジェクトはインスタンス化されるため、これは機能しません。
コンストラクターに例外をスローさせ、それをキャッチして続行させる唯一の解決策はありますか?私は多くのスレッドを見てきましたが、C ++の例外に関する人々の意見はかなり分かれているように思われるので、最善のアプローチが何であるかわかりません。
ifステートメントでこの状況を処理する方法はありますか?