tengo el siguiente código:alcances y C++ punteros
using namespace std;
vector<string*> v;
{
string s = "hello";
v.push_back(&s);
}
{
string ss = "goodbye";
v.push_back(&ss);
}
cout << v.at(0)->c_str() << endl;
cout << v.at(1)->c_str() << endl;
que imprime
goodbye
goodbye
si quito el alcance paréntesis que el código imprimirá
hello
goodbye
¿Qué ocurre exactamente cuando Dejo el primer alcance, que el puntero a la primera cadena ahora apunta a la segunda?
UB, Luke! Esto es solo UB. Tuviste suerte de que tu computadora no explotara. –
Le remito a la ahora famosa respuesta a esta pregunta: http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope – Benj
Sí, [cruce las secuencias] (http://en.wikipedia.org/wiki/Proton_pack#Crossing_the_Streams) de nuevo. –