2014-09-04 236 views
-1

我正在学习类构造函数。为什么在调用复制构造函数之前调用构造函数?

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

+1

请写下您的文章,以便人们不必遵循链接来回答您的问题。 – godel9 2014-09-04 03:32:17

+0

什么@ godel9说的是,在你的文章中,你应该包括相关的代码,输入,预期的产出,实际的产出,表明你有问题了解代码,等等。 – 2014-09-04 04:07:59

回答

2

复制构造正在从

display(line); 

哪里显示功能走线对象的副本,因为它的参数调用。如果将显示功能的定义更改为

void display(Line& obj); 

复制构造函数将被避免。

1

是的,这两条线是不同的。

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

Line line = Line(10)第一个是Line(10)它通过将10传递给临时对象的构造函数来创建临时对象;然后通过将该临时对象传递给复制构造函数来创建line。临时对象然后被销毁。

临时对象应该被优化掉(这叫做copy elision)。某些编译器不能在调试模式下执行复制删除,或者如果您通过开关禁用复制删除。

相关问题