试图理解C ++深层复制

问题描述 投票:0回答:2

我知道如何编写代码,但无法解释代码的含义:

 ArrayList& ArrayList::operator =(const ArrayList& other) {
          delete[] m_elements;
          copy(other);
          return *this; 
 }

第一个问题

我知道ArrayList&的意思是“通过引用传递它”。但这是我第一次将ArrayList&视为一种方法的返回类型。有什么区别:

ArrayList ArrayList :: operator() {} 

ArrayList& ArrayList :: operator(){}

第二个问题

什么是return *this意味着什么?为什么要返回指针?不应该是return this;

**已编辑

第三个问题

下面的代码是否意味着“此方法返回一些奇怪的内存地址(类似于0x90183930)”参考“?

             ArrayList*& ArrayList ::operator(){}
c++ deep-copy
2个回答
0
投票

标准赋值运算符语义作为赋值的结果返回指定的值。

所以它应该返回一个ArrayList或一个const ArrayList&。后者是大型对象的首选,因为它只传递一个地址,而不是相关值的完整副本。

顺便说一句,它返回* this,因为在完成赋值后,*这是分配的值。


2
投票

在C ++中后跟一个&符号的数据类型只是对象的引用,而不是整个对象(这将是一个副本)。因此ArrayList&是对ArrayList类型的对象的引用。

第二个问题是由此产生的。在类ArrayList的上下文中,this是指向当前实例的指针,因此类型为ArrayList**之前的this取消引用此指针,导致指向对象,该对象有效通过引用传递,因此符合指定的ArrayList&返回类型。

如果它返回this而不是*this,则返回类型必须是ArrayList*

© www.soinside.com 2019 - 2024. All rights reserved.