Когда у меня есть такая функция:
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
или я что-то упускаю?