我發現了一個關於stl地圖的非常偏見的事實。出於某種原因,我不能讓對象被插入到地圖中,只能構造/析構一次。如何獲取stl地圖構造/銷燬插入的對象只有一次
實施例:
struct MyObject{
MyObject(){
cout << "constructor" << endl;
}
~MyObject(){
cout << "destructor" << endl;
}
};
int main() {
std::map<int, MyObject> myObjectsMap;
myObjectsMap[0] = MyObject();
return 0;
}
回報:
constructor
destructor
destructor
constructor
destructor
如果我:
typedef std::pair<int, MyObject> MyObjectPair;
myObjectsMap.insert(MyObjectPair(0,MyObject()));
回報:
constructor
destructor
destructor
destructor
我插入的對象負責他們自己的內存分配,所以當被破壞時,他們會清理自己,多次被破壞正在造成一些麻煩。
顯然,'std :: map'不提供用於創建新條目的非複製接口。我建議在這裏共享指針 - 'std :: map >' –
2010-11-14 11:40:40