Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > std::list< Object* > m_list.clear();


Автор: GKosh 3.3.2006, 11:51
std::list< Object* > m_list;
...
m_list.clear();

Простой вопрос, clear() просто чистит свой список или вызывает деструкторы для содержащихся в нем указателей?

То есть, на практике, для того чтобы очистить список объектных указателей нужно вручную перебирать его элементы, вызывая delete для каждого или достаточно clear()?

while( !m_list.empty() )
{
Object* p = m_list.back();
delete p;
m_list.pop_back();
}

Автор: Daevaorn 3.3.2006, 12:04
GKosh, Да, нужно самому удалять указатели. сlear() очищает список, т.е. вызывает деструкторы элементов. А если элемент это указатель, то сам понимаешь, никто за тебя память на которую они указывают удалять не будет.

Автор: GKosh 3.3.2006, 12:53
Daevaorn,
Спасибо!

Автор: np9mi7 5.3.2006, 15:28
Цитата
std::list< Object* > m_list;
, используй boost::shared_ptr;

Код

std::list < boost::shared_ptr <Object> > PointerList;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)