为什么在调用复制构造函数之前调用构造函数?
问题描述:
我正在学习类构造函数。为什么在调用复制构造函数之前调用构造函数?
正如你可以在这个网站上看到: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
传递给构造函数。
Line line = Line(10)
第一个是Line(10)
它通过将10
传递给临时对象的构造函数来创建临时对象;然后通过将该临时对象传递给复制构造函数来创建line
。临时对象然后被销毁。
临时对象应该被优化掉(这叫做copy elision)。某些编译器不能在调试模式下执行复制删除,或者如果您通过开关禁用复制删除。
请写下您的文章,以便人们不必遵循链接来回答您的问题。 – godel9 2014-09-04 03:32:17
什么@ godel9说的是,在你的文章中,你应该包括相关的代码,输入,预期的产出,实际的产出,表明你有问题了解代码,等等。 – 2014-09-04 04:07:59