У меня есть следующий фрагмент коды (который в основном discoveres данной папки рекурсивно), и я не понимаю, что-то об управлении памятью в C++:переменных C++ не удаляются в конце области
for(QFileInfo child : root.entryInfoList()) {
if (child.isDir() &&
child.absoluteFilePath() != rootInfo.absoluteFilePath() &&
child.absoluteFilePath() != rootInfo.absolutePath())
{
discoverDirectory(child.absoluteFilePath());
} else if (child.isFile()) {
qDebug() << "Visiting file: " + child.absoluteFilePath();
watchDog->addPath(child.absoluteFilePath());
fileSysEntries.insert(child.absoluteFilePath(), child);
}
}
Как я помню, переменные, созданные без новых, удаляются в конце области, поэтому все, что находится в entryInfoList, будет удалено в конце этой функции. Поэтому я думал, что это не должно работать, так как я хочу сохранить детей элементов в файле fileSysEntries QMap, но они будут удалены после этого вызова. Однако по какой-то причине я могу получить к ним доступ позже. Я думал, что это происходит потому, что ребенок «s конструктор копирования вызывается при вставке его в fileSysEntries карты, но функция вставки имеет следующую подпись:
iterator QMap::insert(const Key & key, const T & value)
где значение является вызовом параметр имени , так что ребенок предметы не копируются. Я думаю, что меня немного смущает. Может ли кто-нибудь показать мне, что я пропустил?
А я вижу, что я не знаю, что теперь это имеет смысл, спасибо. – Peter
Передача по ссылке означает, что функции присваивается исходный объект, а не копия. Это не означает, что функция не будет делать собственную копию внутри. – benjymous