次のコード スニペット (基本的に、特定のフォルダーを再帰的に検出します) がありますが、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マップに挿入するときにchildのコピー コンストラクターが呼び出されるためだと思いましたが、insert 関数には次のシグネチャがあります。
iterator QMap::insert(const Key & key, const T & value)
ここで、値は名前パラメーターによる呼び出しであるため、子アイテムはコピーされません。これは私を少し混乱させます。誰かが私が見逃しているものを見せてもらえますか?