Klicken Sie Zeilen an, die mit + markiert sind. Dort ist Hilfeinformation hinterlegt.
Ohne Zeile 10 müsste man htwg::string::string() schreiben.
Auch für den leeren String muss Speicher reserviert werden,
und zwar mit new[], damit man in den anderen Funktionen
keine Fallunterscheidungen für leere Strings braucht und
im Destruktor immer delete[] richtig ist.
Die Sprachspezifikation verlangt, dass das temporäre Objekt
that in einem zwar undefinierten, aber konsistenten
Zustand hinterlassen wird. Zwingend ist, dass der Destruktor bei dem
"bestohlenen" Objekt nicht abstürzt. Das tut er hier nicht,
weil delete[] nullptr erlaubt ist. Einige andere Memberfunktionen
würden allerdings mit nullptr abstürzen,
sollten bei einem temporären Objekt aber auch nicht aufgerufen werden.
Implementierung analog zum Move-Konstruktor.
Allerdings muss bei der Move-Zuweisung erst der alte Wert der linken Seite
aufgeräumt werden. In der Praxis ist es eher üblich,
hier die Werte der Membervariablen von this und
that zu tauschen (die Bibliothek unterstützt das sogar
mit einem Funktions-Template std::swap).
std::strcat(t, that.s) wäre langsamer, weil da zuerst
in t das '\0'-Zeichen gesucht werden muss.