Usuwanie pozycji z listy pojedynczo-łączonej

0

Witam,

Mam pewne pytanie odnośnie listy pojedynczo-łączonej i usuwanie z niej elementów. Lista ma w sobie takie węzły:

struct Node {
			T data;
			Node* next;
		};

Wszystko w ramach template'u (stąd to T). T to oczywiście obiekty jakichś klas, które nierzadko zawierają w sobie wskaźniki do obiektów innych klas. Czy instrukcja delete tmp (gdzie tmp jest wskaźnikiem na Node) usunie Node wraz z obiektem T i obiektami, które są w T przechowywane? Czy muszę manualnie wszystko pousuwać? Wydaje mi się, że zajdzie to pierwsze, ale nie jestem pewien.

0

To zależy, jeżeli będzie to:
Node<JakasKlasa> tmp=new Node<JakasKlasa>();
to zwalnianie leży po stronie destruktora tej JakasKlasa i zwykłe
delete tmp;
wystarczy, jednak jeżeli będzie to:
Node<char
> *tmp=new Node();
to przydzielać i zwalniać trzeba ręcznie, z tym że poprawne radzenie sobie z tym jest bardzo skomplikowane, więc zwyczajnie się tym nie przyjmuj.

0

delete tmp zanim usunie Node'a z pamięci wywoła destruktory na każdym ze swoich pól, na obiekcie data również. A czy destruktor obiektu data prawidłowo wszystko pozwalnia to już osobna sprawa.

Tylko miej na uwadze to, że destruktorem wskaźnika jest nierobienie nic. Jeśli T będzie wskaźnikiem np. char* to delete tmp domyślnie nie zwolni pamięci wskazywanej przez ten wskaźnik.

1 użytkowników online, w tym zalogowanych: 0, gości: 1