复制构造函数,深度复制,常量引用
Copy Constructor, Deep Copy, Constant Reference
复制构造函数,深度复制,常量引用
。在内存管理方面。
类a的复制构造函数的形式为a (const a &一)为什么参数通过引用传递?解释为什么不能定义形式为a (a a)
的构造函数回答。我们这样做的三个原因:
- 将对象作为参数传递时的常量引用更有效
- 如果不带const修饰符传递A(A A),则不应该被更改的对象可能会被错误地更改
- 我们这样做是为了使深度复制
这三个原因是正确的吗?
请告诉我。谢谢你,
A(A a)
将需要生成a
的副本,因为它是按值传递的。因此,我们需要调用复制构造函数来进行复制。然而,在这种情况下,没有定义复制构造函数,您不能生成a
的副本,因此它应该通过引用传递。
我们有format:
A(const A& a)
注意:constant reference实际上是对常量的引用。这意味着我们通过引用传递A
的对象,并且在复制a
时不应该更改a
。
复制构造函数接受const引用的更重要的一点是,临时对象不能绑定到非const引用。因此,复制构造函数必须接受对const对象的引用,以便能够复制临时对象。
相关文章:
- 深层复制具有自引用指针的类
- 对复制 CTOR 和 CTOR 的未定义引用
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- C++:右值引用构造函数和复制省略
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 如何复制只引用基类的派生类
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++为具有引用成员变量的类创建复制构造函数
- std::vector 是否有用于引用的复制构造函数?
- 是复制了新数组还是指向结构中引用的数组的指针?
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 通过引用传递是否涉及复制地址
- 复制引用结构上的赋值
- 在 c++ 中复制对未初始化对象的引用
- C++自动生成的具有常量和非常量引用的复制构造函数
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- Icpc错误隐式生成的赋值运算符无法复制引用成员(boost图)
- 函数复制引用字符数组中的数据