если в списке хранить указатели, ну например так
typedef std::list<Object *> List;
List myList;
а потом напихать в него объекты, на пример так
Object * obj1 = new Object;
Object * obj2 = new Object;
myList.push_back(obj1);
myList.push_back(obj2);
то при разрушении списка (при выходе из области видимости) то произойдет утечка паняти..... потому как деструкторы у объектов не вызываются!!!! их нужно для каждого объекта вызывать руками!!!) ну например так
List::iterator iter = myList.begin();
for (; iter != myList.end() ; iter++)
delete (*iter);
Но зато при хранении в списке указателей на объекты, то в списке можно хранить как объекты типа Object, так и производные от Object объекты, а если в списке храняться объекты типа такого std::list<Object> , прои попытке поместить в список объект поизводный от Object произойдет обрезание!!!!
(и это не шутка)
очень советую книгу Effective STL Майерса