È sicuro restituire un vettore che è stato riempito con variabili locali?Sicuro per restituire un vettore popolato con variabili locali?
Per esempio, se ho ...
#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`
}
In questo esempio, sto creando molteplici Target
casi in un ciclo for, spingendoli al vettore, e restituendo un puntatore ad esso. Poiché le istanze Target
sono state allocate localmente, nello stack, significa che il vettore restituito non è sicuro perché fa riferimento a oggetti nello stack (che potrebbero presto essere sovrascritti, ecc.)? In tal caso, qual è il modo consigliato per restituire un vettore?
Sto scrivendo questo in C++, a proposito.
possibile duplicato di [Allocazione dinamica della memoria di vettori in C++] (http://stackoverflow.com/questions/9252523/dynamic-memory-allocation-of-vectors-in-c) –