gpt4 book ai didi

c++ - 返回对 boost::any 持有的数据的引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:46 25 4
gpt4 key购买 nike

我有一个任何指针的映射,称为 gmap,定义如下:

std::map<std::string, boost::any*>& gmap = getSingleton().globalValues;

这张 map 确实是对globalValues的引用,我已经在gdb中查看了地址。我还控制了 any 指针(这就是为什么它们是指针,我宁愿做引用,但我现在正在调试)。现在,我用我声明 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 的引用,它返回对持有值的引用。

因此,根据我的理解,这不应该返回对局部变量的引用。

最佳答案

这很奇怪,但我想通了。

忽略它说如果 T 是一个引用,它会返回一个;我给它传递了一个指针并得到了正确的指针。但无论出于何种原因,我不能只是取消引用返回值并返回。首先,我必须将该指针存储在显式本地(而不是隐式)中,取消引用并返回。

return *boost::any_cast<T>(&gmap[key]);

导致不正确的行为

T* ret = boost::any_cast<T>(&gmap[key]);
return *ret;

产生正确的行为。

不知道为什么,因为 AFAIK 本地仅在底部示例中明确声明。此外,gmap 现在是:

map<std::string, boost::any>

因为我现在不需要拥有任何对象。

关于c++ - 返回对 boost::any 持有的数据的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com