我正在使用std::unordered_map
,我想使用它来存储指向我使用new
动态创建的对象的指针。
我可以很好地创建对象并且插入方法成功;但是,当我尝试使用索引从地图中解析特定对象时,列表中的所有项目都会映射到我在地图中指向的最后一个项目。
typedef std::unordered_map<__int64, Session*> HashDict;
HashDict dict;
void Sessions::Insert()
{
Session* newSession = new Session;
newSession->setId(sessionCounter++);
dict.insert(HashDict::value_type(newSession->Id(), newSession));
}
void Sessions::Find(__int64 id)
{
HashDict::iterator it = dict.find(id);
if(it != dict.end())
{
Session* s = it->second;
std::cout << "Search for: " << id << std::setw(3) <<
" found @ location: " << it->second << std::setw(3) <<
" with value: " << s->Id() << std::endl;
}
}
001D4F50 0
001D5038 1
001D50D0 2
001D5378 3
001D5410 4
001D54A8 5
001D5540 6
001D55D8 7
001D5670 8
001D4E50 9
Search for: 5 found @ location: 001D54A8 with value: 9
请注意5
指向5
处的位置(来自插页),但是它表示值为9
。
我做错了什么?
答案 0 :(得分:1)
如果我不得不从您输出的输出中猜测,那么Session的ID字段是否标记为静态?如果是这样,这将完全表现出你在这里看到的行为。特别是,如果该字段是静态的,那么每次创建和更新新会话的ID时,您将覆盖所有Session对象共享的ID字段,并且只有最后一个会话ID将保持不变。
如果我完全错了,请告诉我,我会删除这个答案。