我有一個無序的地圖std::unordered_map<unsigned int, MyObject*> myDictionary
。C++在unordered_map中添加新對象的最佳方法
當我想添加一個條目時,我首先要檢查該鍵是否已經存在。如果是這樣,我需要訪問我的對象來調用一個函數。
如果該鍵不存在,我想用這個鍵創建一個新的MyObject。
做這個更好嗎?
MyObject *my_obj;
try
{
my_obj = myDictionary.at(key);
}
catch (int e)
{
my_obj = new MyObject();
myDictionary[key] = my_obj;
}
my_obj->Function();
或者這個?
MyObject *my_obj;
if(myDictionary.find(key) == myDictionary->end())
{
my_obj = new MyObject();
myDictionary[key] = my_obj;
}
else
{
my_obj = myDictionary[key];
}
my_obj->Function();
還是別的什麼?
請不要讓原始指針自己的資源。假設你不能在你的地圖中使用普通的'MyObject',使用智能指針。 – chris
如果你不知道什麼是智能指針...請參閱http://stackoverflow.com/questions/106508/what-is-a-smart-pointer-and-when-should-i-use-one – bwegs
在處理異常時應使用try和catch - 通常在代碼有問題時 - 而不是用於控制程序流。我也同意克里斯,你應該在那裏使用智能指針。 – finlaybob