¿Es seguro devolver un vector que se ha llenado con variables locales?¿Es seguro devolver un vector poblado con variables locales?
Por ejemplo, si tengo que ...
#include <vector>
struct Target
{
public:
int Var1;
// ... snip ...
int Var20;
};
class Test
{
public:
std::vector<Target> *Run(void)
{
std::vector<Target> *targets = new std::vector<Target>;
for(int i=0; i<5; i++) {
Target t = Target();
t.Var1 = i;
// ... snip ...
t.Var20 = i*2; // Or some other number.
targets->push_back(t);
}
return targets;
}
};
int main()
{
Test t = Test();
std::vector<Target> *container = t.Run();
// Do stuff with `container`
}
En este ejemplo, estoy creando múltiples instancias Target
en un bucle for, empujándolos al vector, y devolver un puntero a ella. Debido a que las instancias Target
se asignaron localmente a la pila, ¿significa eso que el vector devuelto no es seguro porque se refiere a objetos en la pila (que pueden sobrescribirse pronto, etc.)? Si es así, ¿cuál es la forma recomendada de devolver un vector?
estoy escribiendo esto en C++, por cierto.
posible duplicado de [Asignación dinámica de memoria de vectores en C++] (http://stackoverflow.com/questions/9252523/dynamic-memory-allocation-of-vectors-in-c) –