2017-05-06 3 views
-2

Rückkehr kann ich nicht Sinn der folgenden machen:einen Verweis/L-Wert

nehme ich einen überladenen Zuweisungsoperator erschaffe. Die Funktion würde wie folgt sein:

MyObject& MyObject::operator=(const &rhs) 
{ 
    // code to make this work 

    return *this; 
} 

Wenn ‚dies‘ ist bereits ein Hinweis, warum ich zu dereferenzieren es brauchen? Warum muss ich das Objekt und nicht einen Verweis auf ein Objekt zurückgeben, wie vom Rückgabetyp angegeben? Mit anderen Worten, warum dies nicht nur tun:

MyObject& MyObject::operator=(const &rhs) 
{ 
    // code to make this work 

    return this; 
} 

Alternativ, warum nicht auch dies:

MyObject MyObject::operator=(const &rhs) 
{ 
    // code to make this work 

    return *this; 
} 

Ich bin sehr verwirrt.

Antwort

3

Wenn 'dies' ist bereits eine Referenz,

Leider ist thisnicht bereits eine Referenz. Es ist ein Zeiger auf das Objekt, auf dem die Elementfunktion aufgerufen wurde.

Es ist üblich, obwohl keineswegs notwendig, einen Verweis auf das aktuelle Objekt aus der Zuweisung zurückzugeben, um das Verhalten des integrierten Zuweisungsoperators nachzuahmen, aber Sie können zurückgeben, was auch immer Sie möchten.

+0

Sie können hinzufügen, dass die Standard "Konzepte" 'MoveAssignable' und' CopyAssignable' erfordern, dass der Rückgabetyp 'T &' ist und der zurückgegebene Wert dem zuzuweisenden Objekt entspricht, also jede Klasse, die korrekt zusammenarbeiten möchte mit der Standard-Bibliothek tun müssen, was Sie "üblich" nennen. – Angew

Verwandte Themen