Wenn ich C++ Referenzen richtig interpretiere, sind sie wie Zeiger, aber mit garantierter Datenintegrität (keine NULL, no (int *) 0x12345). Was aber passiert, wenn der Bereich des referenzierten Objekts verlassen wird? Wenn keine Magie involviert ist (und wahrscheinlich auch nicht), wird das referenzierte Objekt hinter meinem Rücken zerstört.Was passiert, wenn die C++ - Referenz ihren Gültigkeitsbereich verlässt?
schrieb ich ein Stück Code, dies zu überprüfen:
#include <iostream>
using namespace std;
class A {
public:
A(int k) { _k = k; };
int get() { return _k; };
int _k;
};
class B {
public:
B(A& a) : _a(a) {}
void b() { cout << _a.get(); }
A& _a;
};
B* f() {
A a(10);
return new B(a);
}
int main() {
f()->b();
}
Das _k
Instanz-Variable wurde gesetzt in Stapelrahmen Existenz zu überprüfen.
Es ist nicht überraschend segfault und ‚10‘ statt korrekt gedruckt werden, während ich nehme an, dass A
auf Stapel zugeordnet ist, und dass Stapelrahmen von f()
wird von mindestens cout<<
Aufruf überschrieben werden.
C++ hat keine "Links", vielleicht meinen Sie "Referenzen"? –
* "Während ich annehme, dass A auf Stack zugewiesen ist und dieser Stack-Frame von f() mindestens überschrieben wird mit call" call "* - scheinst du zu erkennen, dass dies zu undefiniertem Verhalten führt, also warum überhaupt fragen? –
@Evan: sicher, nur das translatorische Problem. – whitequark