我有以下代码片段(基本上是递归地找到给定的文件夹),而我对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中,但是在调用之后它们将被删除。但是,出于某些原因,我以后可以访问它们。我认为这是因为将孩子的复制构造函数插入到fileSysEntries映射中时会被调用,但是insert函数具有以下签名:
iterator QMap::insert(const Key & key, const T & value)
其中value是按名称调用的参数,因此我猜这些子项不会被复制,这使我有些困惑。有人可以告诉我我想念什么吗?
最佳答案
该值通过引用传递到QMap
(此处无副本),然后在地图内部复制。
关于c++ - C++变量不会在作用域末尾删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21284249/