9

RAII (Resource Acquisition Is Initialization) は、オブジェクトを構築するための推奨される方法の 1 つです。それは、「コンストラクターで複雑な作業を行わない」というユニット テストの原則とどのように関連していますか? 特に、「new」演算子によるオブジェクトの明示的な作成はありませんか? ただし、一部のオブジェクトの作成には、より複雑な手順が必要になる場合があり、ファクトリをコンストラクターに渡すと、読みやすさが低下するという意味で API が「ダーティ」になります。両方の原則を同時に満たす一般的な方法は何ですか?

SO に関する他のトピックを見つけました:スタック割り当て RAII オブジェクト vs DI 原則、しかし、それはより一般的な問題のように見え、よく説明されていません。

4

1 に答える 1

7

はい、コンストラクターで具象クラスを作成すると、作成するクラスが複雑になり、クラスに依存関係が追加され、テストが難しくなります。

ただし、RAII はオブジェクトを構築する方法ではなく、リソースを解放する方法です。デストラクタがリソースを解放するクラスは、オブジェクトを構築する必要はありませんが、通常は構築する必要があります:リソースの取得とは何を意味するか (RAII) を参照してください。.

したがって、必要に応じてそれを使用するクラスの外部でリソースを作成し、必要に応じてファクトリを使用してリソースを作成しますが、リソースを使用するクラスに RAII でクリーンアップさせます。

于 2014-05-03T01:54:31.937 に答える