Можно ли вернуть вектор, заполненный локальными переменными?Безопасно вернуть вектор, заполненный локальными переменными?
Например, если у меня есть ...
#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
экземпляров в цикле, толкая их к вектору, и возвращает указатель на него. Поскольку экземпляры Target
были выделены локально, в стек, означает ли это, что возвращаемый вектор является небезопасным, потому что он ссылается на объекты в стеке (которые вскоре могут быть перезаписаны и т. Д.)? Если да, то какой рекомендуемый способ вернуть вектор?
Я пишу это на C++, кстати.
Возможный дубликат [Динамическое распределение памяти векторов в C++] (http://stackoverflow.com/questions/9252523/dynamic-memory-allocation-of-vectors-in-c) –