[問題] map::insert()呼叫constructor的次數
我剛剛寫了一個測試程式
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
03/04 17:54, 1F
→
03/04 19:40, , 2F
03/04 19:40, 2F
→
03/04 19:40, , 3F
03/04 19:40, 3F
推
03/04 21:51, , 4F
03/04 21:51, 4F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章