Die Notwendigkeit der Referenz-/Const-Referenz-Rückgabe im Kopierzuweisungsoperator
Der Kopierzuweisungsoperator in C wirft Fragen bezüglich seines Rückgabetyps auf. Warum wird eine Referenz oder eine konstante Referenz anstelle einer Kopie des neuen Objekts zurückgegeben? Um dieses Konzept zu verdeutlichen, betrachten Sie das folgende Szenario:
A a1(param); A a2 = a1; A a3; a3 = a2; // The problematic line
Angenommen, der Kopierzuweisungsoperator ist wie folgt definiert:
A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }
Die Rückgabe einer Referenz vom Kopierzuweisungsoperator hat erhebliche Vorteile über die Rückgabe eines Exemplars. Durch die Rückgabe einer Referenz wird ein minimaler Arbeitsaufwand ermöglicht, da nur Werte von einem Objekt in ein anderes kopiert werden.
Die Rückgabe nach Wert verursacht jedoch zusätzlichen Aufwand. Bei jedem Aufruf des Zuweisungsoperators werden ein Konstruktor und ein Destruktor aufgerufen, was zu unnötigem Ressourcenverbrauch führt. Zum Beispiel:
A& operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice. Efficient.
Im Gegensatz:
A operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
Daher optimiert die Rückgabe einer Referenz oder einer Konstantenreferenz vom Kopierzuweisungsoperator die Leistung, indem unnötige Objekterstellung und -zerstörung vermieden und die Effizienz gesteigert wird und Wartbarkeit des Codes.
Das obige ist der detaillierte Inhalt vonWarum geben C-Kopierzuweisungsoperatoren Referenzen anstelle von Kopien zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!