嘗試stlMap.insert(map<string, X>::value_type("test", x))
:
#include <iostream>
#include <string>
#include <map>
using namespace std;
class X
{
public:
X() { cout << "X default constructor" << endl; }
~X() { cout << "X destructor" << endl; }
X(const X& other) { cout << "X copy constructor" << endl; }
X& operator=(const X& other) { cout << "X copy-assignment operator" << endl; }
int x;
};
int main()
{
X x;
map< string, X > stlMap;
cout << "INSERT BEGIN" << endl;
stlMap.insert(map< string, X >::value_type("test", x));
cout << "INSERT END" << endl;
stlMap.clear();
cout << "ASSIGN BEGIN" << endl;
stlMap["test"] = x;
cout << "ASSIGN END" << endl;
return 0;
}
在我的G ++是whittles下來到:
- X拷貝構造函數
- X拷貝構造函數
- X的析構函數
編輯:每ArunSaha的uggestion,更新了測試。插入()輸出不變,而分配順序是這樣的:
- X默認的構造函數
- X拷貝構造函數
- X拷貝構造函數
- X的析構函數
- X的析構函數
- X複製賦值運算符
你試過開啓優化我會刪除很多這些。 – 2010-09-22 18:05:38