马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include "iostream"
using std::endl;
using std::cout;
using std::cin;
class Test
{
private:
int a;
int b;
public:
Test(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
}
public:
Test(const Test& t)
{
this->a = t.a + 10;
this->b = t.b + 10;
}
public:
void printTest()
{
cout << this->a << " " << this->b << endl;
}
};
Test fun()
{
Test t1(11, 22);
return t1;//第一次调用copy构造
}
void main()
{
Test t2 = fun(); //第二次调用copy构造 匿名对象转为t2
t2.printTest();
system("pause");
}
问题 return t1的时候 调用一次copy构造 Test t2 = fun()调用一次拷贝构造 t2.printTest()应该是31,42 才对 为啥是21 32 ?
这个嘛,你想的东西对了一半。你的这段代码什么时候会发生拷贝构造呢?一定是去调用fun函数的时候,return这个语句生效了会立即拷贝构造一个新对象。
但是,给匿名对象一个名字,这个操作不会用到拷贝构造函数,这里面不会有新对象产生。
你应该是被Test t2=t1这种情况需要调用拷贝构造给迷惑了,这里要拷贝是因为创建新对象t2。但是给匿名对象名字,就像Test t2=&t1一样,只是多个名字,不需要创建新对象
|