我正在学习类构造函数。
正如您在本网站所看到的:http://www.tutorialspoint.com/cplusplus/cpp_copy_constructor.htm
在网站的第一个示例代码中,
Normal constructor allocating ptr
Copy constructor allocating ptr.
Length of line : 10
Freeing memory!
Freeing memory!
我很难理解为什么在正常构造函数之后调用复制构造函数。
我认为没有理由调用复制构造函数。 以下两个代码行是否不同?
Line line(10); or
Line line = Line(10);
或函数'display'调用复制构造函数?
答案 0 :(得分:2)
正在从
调用复制构造函数display(line);
其中显示功能将线对象的副本作为其参数。如果将显示功能的定义更改为
void display(Line& obj);
将避免使用复制构造函数。
答案 1 :(得分:1)
是的,这两行是不同的。
Line line(10);
创建line
,将10
传递给构造函数。
Line line = Line(10)
首先执行Line(10)
,它通过将10
传递给临时对象的构造函数来创建临时对象;然后通过将该临时对象传递给copy-constructor来创建line
。然后销毁临时对象。
应该优化临时对象(这称为 copy elision )。有些编译器在调试模式下不执行复制省略,或者如果您通过开关禁用复制省略。