如何在将映射从一个函数传递到另一个函数时正确处理内存。
我有一个函数可以返回它构建的地图。值对象是一个类 foo。我在三个不同的位置打印 foo ,它们都给出不同的值。第一次,它给出了正确的值。第二个和第三个是垃圾。
我知道我必须在正确的位置创建 Foo 对象指针。
我想知道在哪里?
std::map<int,Foo*> function_that_returns_the_map(){
std::map<int,Foo*> myMap;
{
int v = 0;
Foo *b = new Foo();
// PRINTING FOO FIRST
std::cout<<""<<*b<<endl;
myMap.insert(std::pair<int,Foo*>(v,b))
}
// PRINTING FOO AGAIN
for(map<int,Foo*>::iterator it = myMap.begin();
it != myMap.end(); ++it)
{
std::cout << " " << *(it->second) << "\n";
}
return myMap;
}
std::map<int, Foo*> myMap;
myMap = function_that_returns_the_map();
//PRINTING FOO AGAIN.
std::map<int, Board*>::iterator it = myMap.begin();
for (it=myMap.begin(); it!=myMap.end(); ++it)
cout<<" "<<*(it->second)<<endl;
单击此处查看我的实际代码。
更新: Foo 的成员变量未使用“新”运算符分配。因此,一旦超出范围,它们就会超出范围并具有垃圾值。