2017-02-09 8 views
1

ネットワークアダプタを制御するためのクラスを開発しており、このクラスのインスタンスが1つしかないことを保証する必要があります。このクラスはネットワーク操作を実行するクライアントによってのみ使用されるため、グローバルアクセスは必要ありません。だからシングルトンパターンではそうではないと思います。C++で単一インスタンスを保証する最良の方法

現在、私はこのnetAdapterの静的インスタンスを持つファクトリを持っていますが、それは良い解決策であるかどうかはわかりません。

これを実行してテストの問題を回避するには、どのような方法が最適ですか?

編集:私は複数のアダプタ(wifi、イーサネット、2G/3G/4G)を持っていますが、それぞれのインスタンスを1つしか持てません。

+5

XY問題:

グローバルアクセスが

は、その後、私はローカル静的変数を示唆する必要はないのですか?なぜあなたはクラスのインスタンスがいくつあるか気にしていますか? – SergeyA

+1

[Singletons](https://en.wikipedia.org/wiki/Singleton_pattern)はこれに適しています。 – Isuka

+3

@Isuka、シングルトンは何のためにも良いです。 – SergeyA

答えて

3

このクラスのインスタンスが1つだけであることを確認する必要があります。

...だから、シングルトンパターンの場合はそうではないと思います。

クラスを単一のインスタンスに限定することが、シングルトンパターンの定義です。

これを実行し、テストの問題を避けるには、どのような方法が最適ですか?

クラスを1つのインスタンスに制限すると、テスト可能性の問題は回避できないと思います。最良のアプローチは、そのような要件を忘れることです。

void function_that_needs_a_single_instance_ever() { 
    static singleton_class instance; 
    // do something with your singleton 
} 
+0

静的ローカルには多くの問題があります。 Microsoft環境では、C++ 11を使用していてもスレッド環境で安全に初期化することはできません。 Microsoftのゲームのために2つのバグレポートが公開されています。 – jww

+0

@jww頭に感謝します。私は、規格適合性が特に欠けていることに気づいていませんでした。 – user2079303

関連する問題