【发布时间】:2011-03-16 14:58:42
【问题描述】:
我有一个任何指针的映射,称为 gmap,定义如下:
std::map<std::string, boost::any*>& gmap = getSingleton().globalValues;
这张地图确实是对 globalValues 的引用,我在 gdb 中检查了地址。 我还控制了任何指针(这就是为什么它们是指针,我宁愿做引用,但我现在正在调试)。 现在,然后我用我声明 gmap 的相同方法返回它:
return boost::any_cast<T&>(*gmap[key]);
在 &boost::any_cast[T&][*gmap[key]] 观察内存,一旦我弹出堆栈帧,数据就会变坏。这很奇怪,因为根据:
Boost's documentation of any_cast
返回: 如果传递了一个指针,如果成功则返回一个类似限定的指向值内容的指针,否则返回 null。如果 T 是 ValueType,则返回保存值的副本,否则,如果 T 是对(可能是 const 限定的)ValueType 的引用,则返回对保存值的引用。
因此,据我了解,这不应该返回对局部变量的引用。
【问题讨论】: