【发布时间】:2013-05-08 14:03:46
【问题描述】:
从std::map::find 返回指向数据的指针并使用它而不是获取数据的副本是否危险?
目前,我获得了指向地图中条目的指针,并将其传递给另一个函数以显示数据。我担心项目移动导致指针无效。这是一个合法的问题吗?
这是我的示例函数:
MyStruct* StructManagementClass::GetStructPtr(int structId)
{
std::map<int, MyStruct>::iterator foundStruct;
foundStruct= myStructList.find(structId);
if (foundStruct== myStructList.end())
{
MyStruct newStruct;
memset(&newStruct, 0, sizeof(MyStruct));
myStructList.structId= structId;
myStructList.insert(pair<int, MyStruct>(structId, newStruct));
foundStruct= myStructList.find(structId);
}
return (MyStruct*) &foundStruct->second;
}
【问题讨论】:
-
我认为您的意思是迭代器而不是指针?
-
你能显示一些代码吗? “从 map.find 返回指针”是指迭代器吗?在调用 .find() 的函数退出之前,迭代器将一直有效。