Frage

In C ++ ist es sicher Umfang über einen Verweis zu verlängern?

Im Code, was ich meine ist:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
War es hilfreich?

Lösung

Es ist nicht sicher, den Umfang über Bezug zu verlängern. Objekte in C ++ werden nicht gezählt Referenz, wenn obj1 den Gültigkeitsbereich verlässt wird sie gelöscht, auf das Ergebnis der badIdea beziehe () werden Sie nur in Schwierigkeiten geraten

Andere Tipps

Der einzige Ort, es ist OK, um einen Rahmen mit einer Referenz zu erweitern ist mit einer const Referenz in namespace oder Funktionsumfang (nicht mit den Teilnehmern).

const int & cir = 1+1; // OK to use cir = 2 after this line 

Dieser Trick in Andrei Alexandrescu des sehr cool Anwendungsbereich guard um einen const Bezug auf eine Basisklasse der Beton Umfang Wache zu erfassen.

Bitte klären, was Sie meinen.

Angenommen, Sie beabsichtigen, dies zu tun:

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!

Dann nein, absolut nicht, den Umfang erweitert erhält nicht durch einen Verweis mit.

Sie können auf intelligente Zeiger aussehen wollen, zum Beispiel von Boost-Bibliotheken: clickety

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top