ある関数から別の関数にマップを渡すときにメモリを適切に処理する方法。
作成したマップを返す関数があります。値オブジェクトはクラス foo です。foo を 3 つの異なる場所に出力すると、すべての場所で異なる値が得られます。初めて、正しい値が得られます。2番目と3番目はゴミです。
適切な場所に 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 のメンバー変数は、'new' 演算子を使用して割り当てられていませんでした。したがって、それらは範囲外になり、範囲外になるとガベージ値を持っていました。