我正在尝试在 C++ 中创建一个通用存储类。如果您查看下面的代码,我想存储string
/的地图AnyType
并访问它们。
class StoresTestC
{
public:
template < class SettingsType >
std::map< std::string, SettingsType >* getStore(std::string const&);
private:
std::map< std::string, void* > stores_;
};
template < class SettingsType >
std::map< std::string, SettingsType >* StoresTestC::getStore(std::string const& name)
{
if (stores_.count(name) > 0)
{
void* temp = this->stores_[name];
return (std::map< std::string, SettingsType >*)(temp);
}
else
{
std::map< std::string, SettingsType > * result = new std::map< std::string, SettingsType > ();
this->stores_[name] = result;
return result;
}
}
我看到这样做有两个明显的危险:
如果我用错误的方式调用它
SettingsType
/name
我将调用错误的演员阵容,据我所知(我可能是错的)将导致未定义的行为。它会造成内存泄漏,但我有一个解决方案(这里也有两个很长的内容)。
还有什么其他可能出错的地方吗?你能预见到吗?