gpt4 book ai didi

c++ - 基于范围的 for 循环的对象生命周期问题

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

我目前正在将我的代码转换为 C++11,但在使用以下基于范围的 for 循环时遇到了问题(FWIW,相同的代码在使用 BOOST for_each 之前运行得很好)。

mLibraryFiles 成员(STL vector )是单例实例的一部分,保证在方法返回后存在,但是当调用者检查返回的对象时,它仅包含垃圾。

在从方法返回后,通过它进行调试似乎从预期内容变成了垃圾,所以我想我一定是对 C++11 基于范围的循环的实际工作方式有误:

Entry* FindEntry(string inName)
{ Entry *rs = NULL;

for (auto libraryEntry : mLibraryFiles)
{
if (libraryEntry.filename.compare(inName) == 0)
{
rs = &libraryEntry;
break;
}
}

return rs;
}

我本以为 libraryEntry 变量表示 mLibraryFiles vector 中的实际对象?

非常感谢任何见解!
(编译器是 LLVM 5.0,虽然我怀疑这很重要..)

最佳答案

vector 中的值被复制到循环中的 libraryEntry,因此您有一个指向复制值的指针,该值在循环后不再存在。使用 auto& libraryEntry

关于c++ - 基于范围的 for 循环的对象生命周期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21207153/

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