プログラム内のすべてのクラスからアクセスできる環境クラスを作成したいのですが、他のクラスからそのメンバーにアクセスするたびに環境オブジェクトを初期化したくありません。C ++でこれを回避するための最良の方法は何ですか?
他のクラスが使用する可能性のあるすべての構成値を環境オブジェクトに保存するため、これを実行したいと思います。これらの値は、さまざまなファイルを含む複数の場所から読み取られます。クラスで新しい環境オブジェクトを作成するたびにファイルを解析したくありません。
プログラム内のすべてのクラスからアクセスできる環境クラスを作成したいのですが、他のクラスからそのメンバーにアクセスするたびに環境オブジェクトを初期化したくありません。C ++でこれを回避するための最良の方法は何ですか?
他のクラスが使用する可能性のあるすべての構成値を環境オブジェクトに保存するため、これを実行したいと思います。これらの値は、さまざまなファイルを含む複数の場所から読み取られます。クラスで新しい環境オブジェクトを作成するたびにファイルを解析したくありません。
シングルトンオブジェクトが常に解決策であるとは限りません。簡単な解決策のように見えることもありますが、いくつかの欠点があります(たとえば、この質問を参照してください)。
このEnvironmentオブジェクトに実際にアクセスする必要があるクラスはいくつありますか?あなたが持っているすべてのクラスを文字通り意味しているなら、それはあなたのデザインに欠陥があるように聞こえます。
多くの場合、シングルトンのより良い代替手段は、実際にそれを必要とする人にオブジェクトを渡すことです。
指摘されているように、あなたが探しているのはシングルトンパターンです。ただし、シングルトンパターンは、多くの場合、不十分な設計の結果です。シングルトンパターン、または、実際にはグローバル変数を必要とするパターンを使用していることに気付いたときはいつでも、問題に対してより良いアプローチがあるかどうかを検討する必要があります。特定の問題に関しては、無料で高品質のオープンソースライブラリであるQtFrameworkの一部であるQSettingsクラスを確認することをお勧めします。
QSetttingsクラスを使用すると、優先するネイティブメカニズム(Windowsのレジストリ、Mac OS Xのプロパティリストファイル、Linuxのgconf XMLファイル)を使用して構成設定をロード/保存できます。また、構成に環境変数を使用することを検討している場合は、私の投稿「環境変数は悪です」を参照することをお勧めします(構成の「環境」という名前はひどく不吉に聞こえます)。
あなたがする必要があるのは、環境クラスをシングルトンパターンでラップすることです。詳細については、このSOの質問を参照してください:C++シングルトンデザインパターン
シングルトンパターンが必要なようです。これにより、クラスの1つのオブジェクト/インスタンスを作成して使用できますが、何度もアクセスしたとしても、それ以上は使用できません。見る:
静的シングルトンであるサービスを作成できます。このサービスには、すべてのオブジェクトコレクションが含まれており、これらのオブジェクトにアクセスするための関数を提供します。