Когда у меня есть такая функция:
std::vector<std::experimental::filesystem::directory_entry> Foo(const std::string& start)
{
std::vector<std::experimental::filesystem::directory_entry> result;
auto paths = std::experimental::filesystem::directory_iterator(start);
for (auto& d : paths) {
if (IsDirectory(d)) {
result.push_back(d);
}
}
return result;
}
требуется ли выполнять копию записи каталога при итерации по коллекции paths с использованием auto d вместо auto& d?
Моя интуиция говорит следующее:
- При итерации
pathsвозвращается ссылка типаstd::experimental::filesystem::v1::directory_entry&. - Затем я передаю его вектору,
push_backкоторого имеет следующую сигнатуру:void push_back (const value_type& val)
Я думаю, это означает, что после того, как я верну вектор из функции, он будет содержать элементы, которые относятся к памяти, которая уже была освобождена, поэтому у меня проблемы.
Итак, вопрос: мне нужно заменить его на auto d или я что-то упускаю?