Безопасно ли возвращать вектор, заполненный локальными переменными?
Например, если у меня есть ...
#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`
}
В этом примере я создаю несколько Target
экземпляров в цикле for, помещая их в вектор и возвращаяуказатель на это.Поскольку экземпляры Target
были выделены локально для стека, означает ли это, что возвращаемый вектор небезопасен, поскольку он ссылается на объекты в стеке (которые могут вскоре быть перезаписаны и т. Д.)?Если так, каков рекомендуемый способ вернуть вектор?
Кстати, я пишу это на C ++.