19 Stimmen

Habe ich meine C++-Referenzvariablen richtig initialisiert?

Ich habe versucht, dieses Thema zu googeln, aber ich kann nichts finden, was ich als relevant erachte. Ich muss also nach dem Falschen suchen; trotzdem wäre ich für einen Ratschlag dankbar...

Foobar &foobar = *new Foobar(someArg, anotherArg);

Geht es nur mir so oder riecht das nicht?

Ich verstehe, dass die new Schlüsselwort ist für die Verwendung mit Zeigern (als solchen) gedacht:

Foobar *foobar = new Foobar(someArg, anotherArg);

Was aber, wenn Sie keinen Zeiger auf diese Instanz benötigen und stattdessen eine Referenz verwenden möchten? Oder ist es so, dass man sie nicht explizit initialisieren muss (ähnlich wie lokale Variablen); und wenn dies der Fall ist, was ist, wenn ich sie mit Parametern initialisieren möchte?

Das folgende funktioniert nicht (es sei denn, ich mache etwas falsch):

// the last argument is of type: int
Foobar &foobar(someArg, anotherArg);

... gibt den Compiler-Fehler:

Liste der Initialisierungsausdrücke wird als Kom Ungültige Initialisierung einer Nicht-Konst-Referenz vom Typ 'Foobar&' aus einem temporären vom Typ 'int'

Und auch das scheint nicht zu funktionieren:

Foobar &foobar = Foobar(someArg, anotherArg);

... gibt den Compiler-Fehler:

Fehler: Ungültige Initialisierung einer Nicht-Konst-Referenz vom Typ 'Foobar&' aus einem temporären vom Typ 'Foobar'

Aktualisierung 1:

Denken Sie daran, dass ich diesen Wert zurückgeben, so dass ich nicht wollen, um eine lokale Variable zu verwenden; Ich möchte einen Wert auf dem Heap, nicht den Stapel zu verwenden:

Foobar &helloWorld()
{
    Foobar &foobar = *new Foobar(someArg, anotherArg);
    foobar.HelloWorld();
    return foobar;
}

Sollte ich nur mit Zeigern statt, oder ist dies völlig gültig?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X