迭代器是否会导致内存泄漏?

问题描述 投票:-2回答:2

如果我不删除* itr会导致内存泄漏吗?我只是想知道一个项目而且不想让分数被取消。

void Directory::removeFile(string fName)
{
// Get files from directory
list<Folder> folders = this->getFolders();
list<File> files = this->getFiles();
for (list<Folder>::iterator itr = folders.begin(); itr != folders.end(); ++itr)
{
    if (fName == (*itr).getFolderName())
    {
        cout << fName << ": Is a directory." << endl;
        return;
    }
}
for (list<File>::iterator itr = files.begin(); itr != files.end(); ++itr)
{
    if (fName == (*itr).getFileName())
    {
        cout << "Found it" << endl;
        itr = files.erase(itr);
        this->setFiles(files);
        return;
    }
} 
cout << "This file does not exist." << endl;
}

编辑:我问这个的原因是因为我做了valgrind并得到了这个结果。这是内存泄漏吗?

HEAP SUMMARY:
==27219==     in use at exit: 0 bytes in 0 blocks
==27219==   total heap usage: 25 allocs, 25 frees, 82,671 bytes allocated
==27219==
==27219== All heap blocks were freed -- no leaks are possible
==27219==
==27219== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==27219== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
c++ pointers memory-leaks iterator
2个回答
3
投票

不,你没有delete一个list<Folder>::iterator itr,因为它是一个自动存储持续时间不是指针的变量。

请记住,您只能将使用new获得的指针提供给delete,并使用new[]获取指针到delete[]


0
投票

如果我不删除* itr会导致内存泄漏吗?

不,它不会。

std::list::erase将确保将调用包含在该位置的对象的析构函数(在您的情况下为File对象)。

© www.soinside.com 2019 - 2024. All rights reserved.