Скажем, у меня есть list<TreeNode>
в моей программе. Каждый раз, когда я использую new
для динамического выделения класса TreeNode
и присоединения его к списку; когда программа заканчивается, список исчезает. Однако я не уверен, что все эти элементы, прикрепленные к нему, будут удалены автоматически, когда список исчезнет. Мне все еще нужно самому пройтись по списку и delete
всем элементам?
Кроме того, какой ущерб будет причинен утечкой памяти? Я думаю, что когда процесс завершится, его пространство памяти будет освобождено, поэтому на самом деле ничего не останется, что навредит моему компьютеру.
smart pointers
, если вы еще этого не сделали :-) они связаны с проблемой такого рода. - person Natan Streppel   schedule 11.03.2014list<TreeNode>
, вы вообще не будете использоватьnew
. Когда вы вставляетеTreeNode
в список, значение копируется; а контейнерlist
заботится об управлении памятью. Вы действительно имели в видуlist<TreeNode *>
? - person M.M   schedule 11.03.2014delete temp;
сразу послеpush_back
.push_back
берет копию*temp
. На самом деле вы могли бы просто пойти:Treenode t; list_t.push_back(t);
и полностью отказаться от ручного управления памятью. - person M.M   schedule 11.03.2014list<T>
принимаетT
по значению. В памяти есть две копии послеpush_back
.list<T*>
будет принимать указатель. Если вы не верите, то либо прочитайте документацию дляstd::list
, или попробуйте изменить*temp
после того, как выpush_back
и посмотрите, изменилась ли копия в списке. - person M.M   schedule 11.03.2014