所以我在 C++ 中有一个指针对的 vector :
vector<pair<Move *,Piece *> > moveList;
其中 Move 是一个对象,Piece 是一个对象... Piece 有类变量 type 和 side
所以我向 moveList 添加内容:
pair <Move *, Piece *> pr (&m,&(p));
moveList.push_back(pr);
其中 m 是一个 Move 对象,p 是一个 Piece 对象
但每当我调用 moveList.back() 方法时,出于某种原因它会修改 Piece 的值
我也是
Move * j = moveList.back().first;
Piece 应该将其“类型”变量的值设置为“X”
但是当我调试时,结果是在上一行之后,出于某种原因,Piece 的“type”变量的值被设置为一些疯狂的数字,例如 -56 '\310'.....
我做错了什么?
编辑
moveList 也被设置为一个类变量
并且插入 moveList 和获取 moveList 的 back() 是在该类中的不同方法上完成的
最佳答案
正如其他人所指出的,您似乎持有指向堆栈中对象的指针。一旦您退出函数/ block ,这些对象将超出范围。由于 STL 容器在内部管理它们的内存,因此一种方法可能是更改 vector 以直接保存对象而不是指针。
vector <pair <Move, Piece> > moveList;
// To insert
moveList.push_back (make_pair <Move, Pair> (move, pair));
当 moveList 对象超出范围时,它会自动释放与对象关联的内存。在指针的情况下,您必须记住手动释放内存,否则会发生内存泄漏。
关于c++ vector of pairs of pointers 搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773660/