看板 C_and_CPP 關於我們 聯絡資訊
我剛剛寫了一個測試程式 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