web-dev-qa-db-ja.com

関数で行われた初期化を追跡する

私のアプリには、複数の初期化を行う初期化関数があります。 initの実行を追跡するための良い方法は何ですか?init nが失敗した場合、終了する前にクリーンアップ/非初期化する前に、すべてのinitが失敗するようにします。これが通常処理される良い方法はありますか?

3
rookie

これが通常処理される良い方法はありますか?

はい。それはRAIIと呼ばれています。

リソース獲得は初期化またはRAIIであると、次のように要約できます。

  • 各リソースをクラスにカプセル化します。
    • コンストラクタがリソースを取得してすべてのクラスの不変条件を確立するか、それができない場合は例外をスローします。
    • デストラクタはリソースを解放し、例外をスローしません。
  • 常に次のいずれかのRAIIクラスのインスタンスを介してリソースを使用します。
    • 自動保存期間または一時的なライフタイム自体がある、または
    • 自動または一時オブジェクトの存続期間によって制限される存続期間を持っている

cppreference.com-raii

これは、この問題を処理するための通常のC++手法です。

6
candied_orange