关键问题 ======================
1) *这会是什么样子
2)链接会是什么样子,我在运算符“=”的重载中返回
3)她回来后去了哪里(确切地说是一步一步)?
4)如果这是一个链接,那么如果我已经有&,它如何继续作为参数工作
============================================
我猜 - - - - - - - - - - - - - - - - - - - - - -
^ // 我将指定为没有名称但在内存中有地址的临时变量
1) 取消引用的 this 将是我的对象a
2)然后发生这样的事情:тип &^_ссылка = a
3)此外,我无法想象分配给谁的东西
-------------------------------------------------- ---------
亲代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是一个简单的类,其中有一个动态数组和构造函数。对赋值构造函数的主要误解,即用 *this for c=a=b
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <iostream>
using namespace std;
class MyClass {
int * data;
public:
int Size;
MyClass(int size) {//Конструктор по умолчанию
this->Size = size;
this->data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = i;
cout << data[i];
}
cout << endl;
cout << "Вызвался Конструктор : "<< this << endl;
}
MyClass(const MyClass &other) { //конструктор копирования
this->Size = other.Size;
this->data = new int[other.Size];
for (int i = 0; i < other.Size; i++) {
this->data[i] = other.data[i];
}
cout << "Вызвался конструктор копирования" << this << endl;
}
MyClass & operator = (const MyClass& other) {//Перегрузка
cout << "Вызвался оператор = " << this << endl;
cout << "Вызвался параметер который копируется = " << &other << endl;
this->Size = other.Size;
if (this->data != nullptr) {
delete[] this->data;
}
this->data = new int[other.Size];
for (int i = 0; i < other.Size; i++) {
this->data[i] = other.data[i];
}
return *this;
}
~MyClass() { // Деструктор
cout << "Вызвался Деструктор : " << this << endl;
delete[] data;
}
};
int main()
{
setlocale(LC_ALL, "ru");
MyClass a(10);
MyClass b(2);
MyClass c(5);
c = a = b;
}
一个更简单的例子:
某类a;
某类b;
a=b 等价于:a.operator=(b);
这个语句中发生的所有事情就是 this->a=l_copy.a 就是这样。
返回 *this 被忽略。
在某些情况下不会忽略它,例如 SomeClass &ref=(a=b) 和其他一些情况;
1)return *this - 返回此对象的新副本,即 更新了一个;
2) SomeClass &refA= *this,即 一个;
3) 相同的引用被分配给引用 SomeClass &refB=refA;
SomeClass &ref = a 不会调用赋值运算符,因为我们只是将该对象写入该地址。