作者darkhcv (我只想耍廢)
看板C_and_CPP
標題[問題] map::insert()呼叫constructor的次數
時間Wed Mar 4 17:07:46 2009
我剛剛寫了一個測試程式
class MyClass
{
public:
MyClass(); // ver.1
MyClass(int aaa); // ver.2
MyClass(const MyClass& rMyClass); // ver.3
~MyClass();
private:
...
};
int main()
{
map<int, MyClass> MyMap;
MaClass* pMy1 = new MyClass(1);
MyMap.insert( make_pair(0, *pMy1) );
// 我發現在呼叫上面這行map::insert時,進行了下面這些動作
// MyClass的copy constructor一共進入了兩次
// 第一次是以*pMy1為參數產生一個MyClass型別的object1
// 第二次是以前一次產生的object1為參數產生另一個object2並插入MyMap中
// 最後呼叫object1的destructor
delete pMy1;
return 0;
}
我想不通為什麼這樣的寫法會進到MyClass的copy constructor兩次
想問一下原因是什麼?
有沒有什麼作法是可以只進入copy consturctor一次就完成插入map的動作的?
謝謝~
--
世界上最難發現的
是遺落在沙漠中的一根針?
世界上最難發現的
是黑夜裡落下的烏鴉羽毛?
世界上最難發現的
是自己的誤解
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.139.157
※ 編輯: darkhcv 來自: 220.128.139.157 (03/04 17:09)
推 legnaleurc:try MyMap[0] = *pMy1; 03/04 17:54
→ darkhcv:我一開始就是用這個方法,他效率更差 03/04 19:40
→ darkhcv:會進一次default constructor和兩次copy constructor 03/04 19:40
推 yoco315:因為 value語意,本來就會兩次 03/04 21:51