Проблема времени жизни объекта с помощью цикла for на основе диапазона

В настоящее время я конвертирую свой код в 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;
}

Я бы ожидал, что libraryEntry Переменная представляет фактические объекты в mLibraryFiles вектор?

Любое понимание высоко ценится!
(компилятор LLVM 5.0, хотя я сомневаюсь, что это важно ..)

1

Решение

Значения из вашего вектора копируются в libraryEntry в цикле, поэтому у вас есть указатель на скопированное значение, которое больше не существует после цикла. использование auto& libraryEntry,

8

Другие решения

декларировать libraryEntry как auto& в противном случае это временная копия, время жизни которой связано с циклом for. Вот почему я предпочитаю писать фактический тип объекта вместо auto

4

По вопросам рекламы [email protected]