基于范围的for循环的对象生存期问题

Jay*_*Jay 1 c++ for-loop object-lifetime auto c++11

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

所述mLibraryFiles构件(STL向量)是一个单件实例的一部分,并且保证当呼叫者检查返回的对象只包含垃圾的方法返回后存在,但是.

通过它进行调试似乎在从方法返回之后从预期内容转为垃圾,所以我想我必须对C++ 11基于范围的循环实际如何工作有所不妥:

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

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

   return rs;
}
Run Code Online (Sandbox Code Playgroud)

我原以为libraryEntry变量代表mLibraryFiles向量中的实际对象?

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

Woj*_*wka 8

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