Ich komme bei den Rückgabewerten immer durcheinander beziehungsweise verstehe es nicht (C++, Funktion, Pointer/Referenz/Wert)?


19.12.2023, 13:52

Besser gesagt ich hatte mich gefragt wie das hunter dem return mit der Deklaration zusammenhängt

2 Antworten

  1. Bei der Deklaration von obj muss ein * nach Obj sein, weil new einen Zeiger auf das allozierte Objekt liefert.
  2. Bei dem Zurückgeben des Zeigers darfst du den Zeiger nicht dereferenzieren, weil der Rückgabedatentyp deiner Funktion function ein Zeiger ist und obj dann ja ebenfalls. (Deswegen musst du obj entsprechend deklarieren, siehe 1.)
Woher ich das weiß:Hobby

Der Stern hat zwei Funktionen:

In der Funktionsdeklaration sagt er, dass Deine Funktion einen Zeiger auf ein Objekt der Klasse Obj liefert.

Er kann aber (wie in Deinem return-Statement) auch verwendet werden, um einen Zeiger zu dereferenzieren, was nichts anders heißt als dass *obj das Objekt liefert und nicht einen Zeiger, den obj liefern würde.

Das & hat die Aufgabe, eine Referenz auf die gegebene Variable zu liefern. Beispiel:

int i = 5;

int* p_i = &i

p_i ist jetzt ein Zeiger auf die Speicherstelle der Variablen i.

Dein Code ist also falsch. Er muss lauten:

Obj* func () {
  Obj* obj = new Obj;
  return obj;
}

Die Funktion liefert einen Zeiger auf ein Objekt. Da Du "new" aufrufst, muss zwingend obj ein Zeigertyp sein. Und dann lieferst Du eben obj zurück, weils ein Obj* ist. Du lieferst nicht *obj zurück, was nur ein Obj wäre!