En este ejemplo, ¿por qué está bien devolver una variable de pila? Cuando devuelve t(), ¿por qué no devuelve la basura, ya que el puntero de la pila se ha incrementado?devolver la variable de pila de C++
#include <<string>>
#include <<vector>>
#include <<iostream>>
using namespace std;
class X{
public:
X() { cout << "constructor" << endl; }
~X() { cout << "destructor" << endl; }
};
vector <X> t()
{
cout << "t() start" << endl;
vector<X> my_x;
int i = 0;
printf("t: %x %x %x\n", t, &my_x, &i);
my\_x.push\_back(X()); my\_x.push\_back(X()); my\_x.push\_back(X());
cout << "t() done" << endl;
return my_x;
}
int main()
{
cout << "main start" << endl;
vector <X> g = t();
printf("main: %x\n", &g);
return 0;
}
salida:
./a.out
main start
t() start
t: 8048984 bfeb66d0 bfeb667c
constructor
destructor
constructor
destructor
destructor
constructor
destructor
destructor
destructor
t() done
main: bfeb66d0
destructor
destructor
destructor
Es peligroso para devolver una referencia ** ** a una variable en la pila ya que podría terminar con la basura. De lo contrario, se construirá una copia y se le entregará a la persona que llama. –