作者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)
1F:推 legnaleurc:try MyMap[0] = *pMy1; 03/04 17:54
2F:→ darkhcv:我一开始就是用这个方法,他效率更差 03/04 19:40
3F:→ darkhcv:会进一次default constructor和两次copy constructor 03/04 19:40
4F:推 yoco315:因为 value语意,本来就会两次 03/04 21:51