next up previous contents index
Next: Keine Referenzrückgabe für neue Up: 50 Ways to Improve Previous: const benutzen

Übergabe und Rückgabe per Referenz

       

Wenn nicht anders angegeben, wird Wertübergabe für Parameter und Funktionsergebnisse verwendet. Das bedeutet, daß Werte kopiert werden müssen (Copy-Konstruktor).

Beispiel:

    class string {...};
    class person
    { string name, vorname;
      ...
    };
    class student : public person
    { string uni, fach;
      ...
    };
    student machnix(student s)
    { return s;
    }

Was kostet ein Aufruf von machnix???

1
Copy-Konstruktor student (Parameter)
2
Copy-Konstruktor (person)
3
Konstrukor string (name)
4
Konstrukor string (vorname)

5
Konstrukor string (uni)
6
Konstrukor string (fach)

7
Copy-Konstruktor student (Ergebnis)
8
Copy-Konstruktor (person)
9
Konstrukor string (name)
10
Konstrukor string (vorname)

11
Konstrukor string (uni)
12
Konstrukor string (fach)

13
Destruktor student (Parameter)
14
Destrukor string (fach)
15
Destruktor string (uni)
16
Destruktor (person)
17
Destrukor string (vorname)
18
Destrukor string (name)

19
Destruktor student (Ergebnis)
20
Destrukor string (fach)
21
Destruktor string (uni)
22
Destruktor (person)
23
Destrukor string (vorname)
24
Destrukor string (name)

Also: Übergabe und Ergebnisrückgabe per Referenz:

    student & machnix( student &s)
    { return s;
    }

Hier wird kein Konstruktor und kein Destruktor aufgerufen, da keine neuen Objekte kreiert werden.

Das geht natürlich nicht immer:


next up previous contents index
Next: Keine Referenzrückgabe für neue Up: 50 Ways to Improve Previous: const benutzen

Peter Pfahler, 1997