【C++】“复制构造”比“先构造,后赋值”更加高效

题目
  Student为表示学生的类且未重载赋值操作符,则下述程序中有调用复制构造函数的是:

1
2
3
4
5
6
7
8
//程序 a
int main() {
Student t1;
Student t2(t1); //1
Student t3 = t1; //2

return 0;
}
1
2
3
4
5
6
7
8
9
//程序 b
int main() {
Student t1;
Student t2(t1); //1
Student t3;
t3 = t1; //2

return 0;
}

解答
  程序a中的1和2都带调用了复制构造函数;而程序b中只有1调用了复制构造函数,2没有调用。
  Student t3 = t1的意思可以表达为:利用对象t1“初始化”对象t3;
  t3 = t1的意思可以表达为:将对象t1“赋值”给对象t3。

利用单步跟踪的方法,可以发现:
  对象t1“初始化”对象t3时,编译器调用了复制构造函数,但没有调用构造函数;
  先定义t3,再把对象t1“赋值”给对象t3时,编译器调用了构造函数,但没有调用复制构造函数;

结论
  由此可见,复制构造函数可以一步解决:“初始化”一个新对象并给其“赋值”的功能,比先构造,后赋值更加高效一点(针对使用已有对象初始化新对象的情况)。

————————— 本文结束 感谢您的阅读 —————————
谢谢你请我喝咖啡ლↂ‿‿ↂლ(支付宝扫一扫即可领红包, 消费时可抵现! 你省钱, 我赚钱, 多谢支持~)