今天有个学生问我下面的例子拷贝构造了几个对象:
CSample CopySample(CSample & Value) { /* CSample a(Value); return a; */ return CSample(Value); } void main() { CSample sample1; CSample sample2 = CSample(sample1); }
准确答案是只拷贝构造了一次。
原因是return的值直接用来初使化sample2,而不是放在一个临时变量里,再用这个临时变量拷贝构造sample2;
如果是CSample sample2;sample2 = CSample(sample1); 那么,return的值会放在一个临时变量里,然后使用这个临时变量做为sample2的‘=’运算符重载的参数。