我有以下代码片段(它基本上递归地发现给定的文件夹),我不了解 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);
}
}
我记得,在没有 new 的情况下创建的变量会在作用域的末尾被处理掉,所以无论entryInfoList中的内容是什么,它都会在这个函数的末尾被处理掉。所以我认为这不应该起作用,因为我想将子项存储在fileSysEntries QMap 中,但在此调用后它们将被删除。但是,由于某种原因,我稍后可以访问它们。我认为这是因为child的复制构造函数在将其插入fileSysEntries映射时被调用,但 insert 函数具有以下签名:
iterator QMap::insert(const Key & key, const T & value)
其中value是按名称参数调用,所以我猜子项不会被复制,这让我有点困惑。有人可以告诉我我想念什么吗?