class Test
{
public:
int a_;
Test()
{
printf("默认构造函数 %p\n", this);
}
Test(int a){
printf("构造函数 %p\n", this);
a_=a;
}
Test(const Test &test)
{
printf("拷贝构造函数 %p %p\n", this, &test);
}
Test& operator=(const Test &test)
{
printf("赋值构造函数 %p %p\n", this, &test);
}
};
int main() {
map<int, Test> mapTmp;
Test a(1);
// mapTmp.insert(make_pair(1,a));
mapTmp[1] = a;
return 0;
}
使用mapTmp[1] = a;
插入时,调用一次默认构造函数,再调用一次赋值构造函数;
int main() {
map<int, Test> mapTmp;
Test a(1);
mapTmp.insert(make_pair(1,a));
// mapTmp[1] = a;
return 0;
}
使用mapTmp.insert(make_pair(1,a));;
插入时,调用两次拷贝构造函数;
注意:
使用mapTmp[1] = a;
插入时需要调用无参构造函数,因此类的实现中,必须实现无参的构造函数,否则会报错。