gpt4 book ai didi

C++ 变量不会在范围末尾被删除

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:15 24 4
gpt4 key购买 nike

我有以下代码片段(基本上是递归地发现给定的文件夹),但我对 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 中有什么,它都会在这个函数的末尾被处理掉。所以我认为这不应该工作,因为我想将 child 项目存储在 fileSysEntries QMap 中,但它们将在这次调用后被删除。但是,出于某种原因,我以后可以访问它们。我认为这是因为 child 的复制构造函数在将其插入 fileSysEntries 映射时被调用,但插入函数具有以下签名:

iterator QMap::insert(const Key & key, const T & value)

value 是按名称参数调用的地方,所以我猜 child 项目不会被复制,这让我有点困惑。有人可以告诉我我错过了什么吗?

最佳答案

该值通过引用传递给 QMap(此处没有复制)并之后复制到 map 中。

关于C++ 变量不会在范围末尾被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com