我目前正在将我的代码转换为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

10-08 09:32