假设我们有以下操作:
Object a = b.copy();
copy()
基本上是一个复制对象并返回其副本的方法。
Object copy()
{
Object copied_Object;
/..do the copy../
return copied_Object;
}
起初我认为返回会触发作业operator =
和地点
操作的右侧字段的结果,但事实证明,实际上复制构造函数被激活,然后在函数内创建的Object被销毁。这就是我所知道的。
我的问题是,你能逐步向我解释在执行Object a = b.copy();
时会发生什么吗?
答案 0 :(得分:1)
Object a = b.copy();
是创建/构造/初始化Object的指令。不涉及作业。
分配看起来像这样,
object = something;
注意没有对象声明。
现在
Object a = b.copy();
通过类型Object
的b.copy()构造a,这需要Object
能够由另一个Object
构造。这当然是复制构造函数。编译器生成的,或默认的或显式的复制构造函数。
执行语句时,复制函数将执行并通过
将创建的copied_Object传送给调用者a
。无需复制构造。正如Jarod所暗示的那样。作为LogicStuff,建议你可以做
Object copy()
{
return *this;
}
这会将b
对象的内容复制到返回值,并需要一个复制构造函数。
我也会偷走Daniel H的评论并得出结论
Object a = b;
在正常情况下,将具有完全相同的语义。即最不惊讶的情况。