我有下面的代码片段(这基本上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中,但它们将在此调用后删除。但是,由于某种原因,我可以稍后访问它们。我想这是因为将其插入fileSysEntries当孩子的拷贝构造函数被调用地图,插入功能具有以下特征:
iterator QMap::insert(const Key & key, const T & value)
其中值是名称参数调用,所以孩子项目不会被复制我猜,这使我有点混淆。有人能告诉我我错过了什么吗?
我明白了,我不知道,现在这是有道理的,谢谢。 – Peter
通过引用传递仅仅意味着该函数被赋予了原始对象,而不是副本。这并不意味着该功能不会在内部制作自己的副本。 – benjymous