Какая разница между return this и return *this?
this — это указатель на текущий объект. *this — это ссылка на текущий объект. Пример:

class A {
public:
  int x;
  A(const A& other) = default;
  A& operator=(const A& other) {
    x = other.x;
    return *this;
  }
};

void test() {
  A a(1);  // a.x == 1
  A b(2);  // b.x == 2
  A c(3);  // c.x == 3

  a = b = c;
  // a.x == 3
  // b.x == 3
  // c.x == 3
}

Как работает вот это присваивание? Оператор присваивания право-ассоциативен, то есть компилятор видит это как a = (b = c);. Итак, вначале b = c. Вызывается b.operator=(c). Там мы вначале присваиваем c.x (3) в b.x, затем (и это здесь самое главное!) возвращаем ссылку на b. Далее в a = (результат) объекту a присваивается та самая возвращённая ссылка на b, благодаря чего в a.x тоже оказывается 3.
Возвращает объект,на который ссылается указатель.