我有以下代码片段(基本上是递归地找到给定的文件夹),而我对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/

10-10 19:51