Rückkehr Verweis auf lokale temporäre Objekt
Dieser code
virtual const core::matrix4& getViewMatrixAffector() const {return core::matrix4();};
Ergebnisse mit einer Warnung, die sagen mir "die Rückkehr Verweis auf lokale temporäre Objekt"...
Wie lösen Sie diese Warnung?
Wie unten erwähnt habe ich versucht zu entfernen, die '&'...
- Nicht wieder einen Verweis auf eine lokale, temporäre Objekt.
- Der Arzt hat mich gewarnt, dass Rauchen schlecht ist. Was sollte ich tun, um ihn zu stoppen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da bist du nicht die Kontrolle über die Rücksendung geben, müssen Sie sicherstellen, dass Sie wieder ein gültiges Objekt und nicht nur ein vorübergehendes. Eine Lösung wäre eine Funktion, die lokale static-variable:
Wenn Sie sich finden, dies zu tun, in vielen Funktionen (mit dem gleichen Typ der Variablen), machen
val
a (entsprechend umbenannt) statisches Mitglied der Klasse.Wenn Sie die Rückgabe durch Referenz, wie in
core::matrix4&
Sie brauchen ein Objekt, das noch um, wenn die Funktion zurückgibt. In Ihrem Fall, sind Sie wieder ein "lokales, temporäres Objekt", die erst dann zerstört wird, nachdem die Funktion beendet. Um dieses Problem zu beheben, müssen Sie zurück, indem Sie den Wert wie folgt:core::matrix4
anderswo und geben einen Verweis darauf, oder Speicher es in dieser Funktion und speichern der Zeiger in ein Objekt zu später gelöscht werden.Wenn Sie ein Objekt erstellen, das als eine lokale, temporäre, es ist zerstört, sobald die Funktion Gültigkeitsbereich endet. Sie sollte nie wieder einen Verweis darauf, wie dies ergäbe ein Undefiniertes Verhalten.
Die Rückkehr ist es von Wert, oder wieder ein smart pointer auf ein Objekt auf dem free store.
Intel C++ 14.0.3.202 gibt diese Warnung auch, wenn die Referenz gültig ist außerhalb der Funktion. Dies ist nur ein bug, den ich erlebte in dieser version, aber es kann auch erscheinen, in anderen. Wenn Sie diese version verwenden: einfach Maske die Warnung aus, indem er Ihre Funktion auf diese Weise:
Ich bin nicht sicher, ob 473 ist der index für diese Warnung, aber Sie sehen das richtig das man in der compulers Nachrichten.
Wenn es wirklich ein lokales Objekt, das Sie wieder einen Verweis auf, dann sollten Sie es nicht tun, weil das Objekt nicht gültig sein, wenn die Funktion getViewMatrixAffector() gibt.