Si interpreto las referencias de C++ correctamente, son como punteros, pero con integridad de datos garantizada (no NULL, no (int *) 0x12345). Pero, ¿qué ocurre cuando se abandona el alcance del objeto al que se hace referencia? Si no hay magia involucrada (y probablemente no lo sea), el objeto referenciado se destruirá a mis espaldas.¿Qué sucede cuando la referencia C++ deja su alcance?
me escribió una pieza de código para comprobar esto:
#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();
}
La variable _k
ejemplo, se puso en la pila para comprobar la existencia de trama.
Sorprendentemente, no segfault y en su lugar imprime '10' correctamente, mientras que supongo que A
se asigna en la pila y que el marco de pila de f()
se sobrescribirán con al menos cout<<
llamada.
C++ no tiene "enlaces", ¿tal vez quiere decir "referencias"? –
* "aunque supongo que A se asigna en la pila y que el marco de la pila de f() se sobrescribirá al menos cout << call" * - parece darse cuenta de que esto dará un comportamiento indefinido, entonces ¿por qué siquiera preguntar? –
@Evan: seguro, solo el problema de traducción. – whitequark