返回对象如何与分配运算符一起工作
how does returning an object work with assignment operator?
假设我们有以下操作:
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传输到呼叫者- 复制构造
- 复制省略,编译器将调用其黑色魔法框并构建对象
a
就位。无需复制构造。正如jarod所暗示的。
作为Logicstuff,建议您可以做
Object copy()
{
return *this;
}
这将b
对象的内容复制到返回值,并需要复制构造函数。
我也会窃取丹尼尔·H的评论,并得出结论
Object a = b;
在正常情况下将携带完全相同的语义。IE。至少令人惊讶的情况。
相关文章:
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 [][] 运算符与向量一起使用?
- 不能将重载比较运算符与 Catch 测试一起使用
- 让类与运算符一起工作更简单的方法
- #define 与运算符一起使用
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 返回对象如何与分配运算符一起工作
- 将逻辑 OR 与 cout 运算符一起使用
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 我可以将 std:fixed 或 std::setprecision() 与>>运算符一起使用吗?
- 如何使 QList<Type*> 与 indexOf() 和自定义运算符==()一起使用?
- 将 std::forward 与 typeid 运算符一起使用是否有意义
- 如何将 std::<list>::reverse_iterator 与运算符 + 一起使用?
- 与类型转换运算符一起使用时条件运算符"?:"的编译器错误
- 如何将运算符[]与运算符=一起使用
- 与条件运算符一起使用时,动作不一致
- 我可以将enable_if之类的东西与隐式转换运算符一起使用吗
- 如何将运算符+和运算符=一起使用
- C++如何验证输入以与重载>>运算符一起使用
- 如何使用 std::find 与不是 std::less 的<运算符一起使用