C ++ newbie here,我希望我的类能够使用相同的构造函数参数为所有instatiation引用相同的对象(例如,如果对象已经存在,我实例化的新变量应返回现有对象而不是创建一个相同的价值)。 是否有语义方法可以做到这一点,或者是保持包含类中所有对象的静态向量的最佳方法,并检查构造函数中是否存在具有相同参数的对象?
答案 0 :(得分:0)
如果你可以从参数创建一个哈希,你可以做一些类似的事情:
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
的析构函数中是必需的。因此,我提出了一些受控破坏阶段,其中s_instances
元素被移除和破坏。