为什么在调用复制构造函数之前调用构造函数?

时间:2014-09-04 03:27:50

标签: c++ constructor

我正在学习类构造函数。

正如您在本网站所看到的: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'调用复制构造函数?

2 个答案:

答案 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 )。有些编译器在调试模式下不执行复制省略,或者如果您通过开关禁用复制省略。