あなたは、いくつかの同様の操作を行うことができますパラメータからハッシュを作成することができた場合:
class YourClass
{
static std::unordered_map< std::string, YourClass > s_instances; // You can use std::map as well
static YourClass& get_instance(paramtype1 param1, paramtype2 param2);
static std::string create_hash(paramtype1 param1, paramtype2 param2);
// The implementation depends on the type of parameters
};
std::unordered_map< std::string, YourClass > YourType::s_instances;
YourClass& YourClass::get_instance(paramtype1 param1, paramtype2 param2)
{
auto hash = create_hash(param1, param2);
auto it = s_instances.find(hash);
if (it == s_instances.end())
{
return it->second;
}
else
{
s_instances[ hash ] = YourType(param1, param2);
return s_instances[ hash ];
}
}
は、当然のことながら、あなたが答えているか疑問のトンがあります 1.この操作スレッドセーフする必要がありますか?私。複数のスレッドで並列にアクセスすることもできますか?はいの場合は、s_instances
をパラレル変更から保護する必要があります。
- 破壊フェーズはどのように見えますか?静的メンバーは、作成の逆の順序で破棄され、実行されるタイミングを制御することは非常に困難です。これは、デストラクタである
YourClass
に必要なリソースが既に破棄されている可能性があることを意味します。そのため、私はいくつかのコントロールされた破壊フェーズを提案します。ここでは、要素が削除されて破壊されます。
「シングルトンクラス」が必要です:http://www.yolinux.com/TUTORIALS/C++Singleton.htmlまたはgoogle it! –
シングルトンパターンをルックアップします。 – Peter
それらの多くがある場合、それはシングルトンではありません... –