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

Why Constructor is called before the copy-constructor is called?

本文关键字:调用 构造函数 复制 为什么      更新时间:2023-10-16

我正在学习类构造函数。

正如你在这个网站上看到的: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"调用复制构造函数?

正在从调用复制构造函数
display(line);

其中显示函数将线对象的副本作为其参数。如果您将显示功能的定义更改为

void display(Line& obj);

将避免复制构造函数。

是的,这两行不同。

Line line(10);创建line,将10传递给构造函数。

CCD_ 4首先执行CCD_ 5,该CCD_;然后它通过将该临时对象传递给复制构造函数来创建CCD_ 7。然后将销毁临时对象。

临时对象应该被优化掉(这被称为复制省略)。有些编译器在调试模式下不执行复制省略,或者如果您传递开关以禁用复制省略。