返回对象如何与分配运算符一起工作

how does returning an object work with assignment operator?

本文关键字:运算符 一起 工作 分配 对象 返回      更新时间:2023-10-16

假设我们有以下操作:

Object a = b.copy();

copy()基本上是一种复制对象并返回其副本的方法。

Object copy()
{ 
    Object copied_Object;
    /..do the copy../
    return copied_Object;
}

首先,我认为返回会触发分配operator =并放置在操作的正确字段上的结果,但事实证明,实际上复制构造函数被激活,然后在函数中创建的对象被破坏。这就是我所知道的。

我的问题是,您能逐步向我解释Object a = b.copy();执行时会发生什么?

Object a = b.copy();

是创建/构造/初始化对象的指令。不涉及任何作业。

作业看起来像这样,

object = something;

请注意,没有对象声明。

现在

Object a = b.copy();

Object类型的b.copy((构造A,这需要Object具有由另一个Object构造的能力。这当然是复制构造函数。编译器生成的编译器,或默认的编译器或明确的复制构造函数。

执行语句时,复制函数将通过任何一个

执行并将创建的copied_object传输到呼叫者
  1. 复制构造
  2. 复制省略,编译器将调用其黑色魔法框并构建对象a就位。无需复制构造。正如jarod所暗示的。

作为Logicstuff,建议您可以做

Object copy()
{ 
    return *this;
}

这将b对象的内容复制到返回值,并需要复制构造函数。

我也会窃取丹尼尔·H的评论,并得出结论

Object a = b;

在正常情况下将携带完全相同的语义。IE。至少令人惊讶的情况。