[問題] map::insert()呼叫constructor的次數

看板C_and_CPP (C/C++)作者 (我只想耍廢)時間16年前 (2009/03/04 17:07), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/2 (看更多)
我剛剛寫了一個測試程式 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)

03/04 17:54, , 1F
try MyMap[0] = *pMy1;
03/04 17:54, 1F

03/04 19:40, , 2F
我一開始就是用這個方法,他效率更差
03/04 19:40, 2F

03/04 19:40, , 3F
會進一次default constructor和兩次copy constructor
03/04 19:40, 3F

03/04 21:51, , 4F
因為 value語意,本來就會兩次
03/04 21:51, 4F
文章代碼(AID): #19haJf3T (C_and_CPP)
文章代碼(AID): #19haJf3T (C_and_CPP)