Zwalnianie pamięci wskazniki

Zwalnianie pamięci wskazniki
AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

Witam! Mam małą klasę:

Kopiuj
class Czlon
{
public:
	int * m;
	int * t;

	int * x;

	int * w;
 

I teraz wskaznik m i t jest jako tablica dynamiczna, natomiast x i w to wskazniki do pojedynczej danej. W main tworze tablice dynamiczna obiektow typu Czlon:

Kopiuj
 Czlon * czlon = new Czlon[20];

Jak będzie wyglądało tutaj zwalnianie pamięci...? Wystarczy ze zrobię tylko

Kopiuj
delete [] czlon; 

Czy musze najpierw zwolnic wewnętrzne tablice? tzn w pętli for zwalniac m,t,x,w??

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Wewnętrzne tablice powinien zwolnić destruktor, po to istnieje.
Po kiego robisz to tak: Czlon * czlon = new Czlon[20]; kiedy możesz tak: vector<Czlon> czlon(20); - nawet łatwo da się powiększyć, nie to co twój ... pomysł.

Endrju
  • Rejestracja: dni
  • Ostatnio: dni
0

Musisz zwalniać wszystko, co zaalokowałeś ręcznie. Jeżeli klasa Czlon nie zwalnia w destruktorze zasobów, które zaalokowała, będziesz mieć wyciek pamięci przy usunięciu tablicy obiektów typu Czlon. Aby uniknąć takich problemów używaj kontenerów, które same dbają o pamięć: w tym przypadku std::vector<T>.

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

no wiem ale to było pisane, żeby zrozumieć...

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

Prosta zasada brzmi: jeśli gdzieś wstukałeś new to powinieneś też gdzieś mieć delete. Stosunek 1:1. Czyli jeśli sam zaalokowałeś te tablice, to sam też masz je zwolnić.
Czasami ta zasada nie jest prawdziwa, np. klasa alokuje pamięć, przekazuje wskaźnik komuś innemu i tamten ma sprzątać. Niemniej w Twoim przypadku ta zasada jest ok.

A najlepiej to nigdzie nie wstukać tego new. Zamiast tablic użyj std::vector, zamiast gołych wskaźników unique_ptr, shared_ptr. I wtedy problem zwalniania przestaje istnieć.

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

oki dzięki za odp :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.