Objekte als Parameter

Auch wenn sich Objekte als Wertparameter übergeben lassen - genauso wie in C++ ja auch die Standardtypen als Objekte aufgefaßt werden können - so sind doch einige spezielle Dinge zu beachten, wenn man Objekte mit speziellen Konstruktoren und Destruktoren übergibt, da diese bei einer Wertübergabe implizit aufgerufen werden.

Bei der Übergabe als Wertparameter erzeugt der Compiler ja eine lokale Kopie des übergebenen Wertes. Dazu wird der eben besprochene Kopierkonstuktor aufgerufen. Dies kann oft nicht wünschenswert sein, da Ressourcen verschwendet werden (falls der Kopierkonstruktor komplex ist) oder Nebeneffekte auftreten können (z.B. neue Gäste gezählt werden). Ein besonderer Fall, wo eine Wertübergabe kritisch wäre, ist die Übergabe eines Objektes an den Kopierkonstruktor. Würde diese Übergabe per Wert erfolgen, würde ja bei dem Aufruf wieder der Kopierkonstruktor aufgerufen, für diesen Aufruf wieder und so fort. Es würde eine unendliche Rekursion erzeugt.

Das bei der Wertübergabe erzeugte Objekt wird wie andere lokale Objekte am Ende der Funktion gelöscht, indem der zugehörige Destruktor aufgerufen wird. Auch das kann zu unerwünschten Wirkungen führen, falls der Destruktor mehr macht, als nur das Objekt aufzuräumen. Beispiele für solche Probleme im Umgang mit Kopierkonstruktoren und Destruktoren findet man im Kapitel Pointer .

Im allgemeinen ist es daher sinnvoll, Objekte als (konstante) Referenz zu übergeben. Ausnahmen bilden dabei sehr kleine und wenig komplexe Objekte und zum anderen Situationen, in denen ein Objekt geändert werden soll, um z.B. als Rückgabewert genutzt zu werden - dazu mehr in den Beispielen am Ende des Kapitels.