क्या स्थानीय वेरिएबल से भरे वेक्टर को वापस सुरक्षित करना सुरक्षित है?स्थानीय चर के साथ आबादी वाले वेक्टर को वापस करने के लिए सुरक्षित?
उदाहरण के लिए, अगर मैं है ...
#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
उदाहरण स्थानीय रूप से आवंटित किए गए थे, तो क्या इसका मतलब यह है कि लौटा वेक्टर असुरक्षित है क्योंकि यह स्टैक पर ऑब्जेक्ट्स का जिक्र कर रहा है (जिसे जल्द ही ओवरराइट किया जा सकता है)? यदि हां, तो वेक्टर वापस करने का अनुशंसित तरीका क्या है?
मैं इसे सी ++ में लिख रहा हूं, वैसे भी।
संभवतः डुप्लिकेट [सी ++ में वेक्टरों की गतिशील मेमोरी आवंटन] (http://stackoverflow.com/questions/9252523/dynamic-memory-allocation-of-vectors-in-c) –