|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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一样,只是多个名字,不需要创建新对象
|
|