Предположим, у меня есть список, как такойОпорожнение содержимое списка
std::list<foo*> lst;
Если я следующее:
lst.clear
волю, вызывать деструктор всех элементов в списке? или мне придется вызвать деструктор по отдельности для каждого элемента? Если не то, что было бы лучшим способом очистить содержимое списка и вызвать деструктор указателей? Будет ли следующая работа или есть лучший способ сделать это
for(
std::list<foo*>::iterator listMyClassIter = lst.begin();
listMyClassIter != lst.end();
listMyClassIter ++) {
delete listMyClassIter; }
lst.clear(); //Now clear the content
Некоторые вопросы: на что указывают указатели? Какова продолжительность жизни этих объектов? Кто их владеет, если кто? – juanchopanza
Ваш цикл 'for' правильно подходит. Однако, если вам это нужно в более чем одной точке, ваш код быстро станет спагетти. Чтобы смягчить эту проблему, по крайней мере, оберните эту логику в объект, который отвечает за управление временем жизни объектов, на которые указывают элементы 'vector'. – 5gon12eder