如果我不删除* 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)
不,你没有delete
一个list<Folder>::iterator itr
,因为它是一个自动存储持续时间不是指针的变量。
请记住,您只能将使用new
获得的指针提供给delete
,并使用new[]
获取指针到delete[]
。
如果我不删除* itr会导致内存泄漏吗?
不,它不会。
std::list::erase
将确保将调用包含在该位置的对象的析构函数(在您的情况下为File
对象)。