Будет ли итератор причиной утечки памяти? - PullRequest
0 голосов
/ 10 сентября 2018

Приведет ли это к утечке памяти, если я не удалю * 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)

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Приведет ли это к утечке памяти, если я не удалю * itr?

Нет, не будет.

std::list::erase убедится, что деструктор объекта, содержащегося в локации, в вашем случае объект File, будет вызван.

0 голосов
/ 10 сентября 2018

Нет, вам не нужно delete a list<Folder>::iterator itr, поскольку это переменная с автоматической продолжительностью хранения, которая не является указателем.

Пожалуйста, помните, что вы можете кормить только указателей, полученных с помощью new до delete, и указателей, полученных с new[] до delete[].

...