这会在使用指针映射时导致悬空指针吗
Is this causing a dangling pointer when using map of pointers
这个简单的代码会生成一条警告“烘焙指针的对象将在完整表达式结束时被销毁”。那是什么意思?使用get_map
后对象entry
可以不使用吗?还有为什么会出现这个警告
static std::map<std::string, int *> get_map() {
static std::map<std::string, int*> the_map;
return the_map;
}
int main() {
(...)
auto entry = get_map().find("HEY");
(...) use entry , is that wrong ?
}
Can I not use the object entry
after I use get_map
?
不,你不能。
static std::map<std::string, int *> get_map()
returns 地图的 副本。
auto entry = get_map().find("HEY");
returns 指向副本的迭代器。分配 entry
后立即销毁副本(因为副本未保存在任何变量中,它仍然是临时的)。所以,entry
不能安全使用。
这个简单的代码会生成一条警告“烘焙指针的对象将在完整表达式结束时被销毁”。那是什么意思?使用get_map
后对象entry
可以不使用吗?还有为什么会出现这个警告
static std::map<std::string, int *> get_map() {
static std::map<std::string, int*> the_map;
return the_map;
}
int main() {
(...)
auto entry = get_map().find("HEY");
(...) use entry , is that wrong ?
}
Can I not use the object
entry
after I useget_map
?
不,你不能。
static std::map<std::string, int *> get_map()
returns 地图的 副本。
auto entry = get_map().find("HEY");
returns 指向副本的迭代器。分配 entry
后立即销毁副本(因为副本未保存在任何变量中,它仍然是临时的)。所以,entry
不能安全使用。