Zmienne dynamiczne w C++
Zmienne dynamiczne w C++ to zmienne, których rozmiar i czas życia są określane w czasie działania programu, a nie w czasie kompilacji. Są tworzone w strefie pamięci zwanej stertą (heap) i pozwalają na elastyczne zarządzanie pamięcią, zwłaszcza gdy nie znamy z góry rozmiaru danych.
1. Tworzenie zmiennych dynamicznych
- W C++ używa się operatora
newdo alokacji pamięci dynamicznej. - Operator
newzwraca wskaźnik do zaalokowanej pamięci.
Składnia:
Przykład:
liczbajest wskaźnikiem na zmienną typuintutworzoną w pamięci dynamicznej.- Wartość zmiennej ustawiamy poprzez dereferencję
*liczba.
2. Zwalnianie pamięci
- Pamięć zaalokowaną dynamicznie należy zwolnić po użyciu, aby uniknąć wycieków pamięci.
- W tym celu używa się operatora
delete.
Przykład:
- Dla tablic dynamicznych używamy
delete[]:
3. Dynamiczne tablice
- Dynamiczne tablice pozwalają tworzyć tablice o rozmiarze określonym w czasie działania programu.
Przykład:
- Umożliwia tworzenie tablic o zmiennym rozmiarze, czego nie da się zrobić w przypadku zwykłych tablic statycznych.
4. Zmienne dynamiczne a wskaźniki
- Każda zmienna dynamiczna zwraca wskaźnik, który pozwala na dostęp do tej zmiennej.
- Można tworzyć wskaźniki do pojedynczych zmiennych, tablic, struktur, obiektów klas.
Przykład z obiektem klasy:
- Operator
->służy do dostępu do członków obiektu przez wskaźnik.
5. Zalety zmiennych dynamicznych
- Możliwość tworzenia zmiennych o nieznanym rozmiarze w czasie kompilacji.
- Efektywne wykorzystanie pamięci – pamięć zaalokowana tylko wtedy, gdy jest potrzebna.
- Możliwość tworzenia struktur danych dynamicznych: listy, drzewa, stosy, kolejki.
6. Wady i ryzyka
- Niewłaściwe zarządzanie pamięcią może prowadzić do:
- Wycieku pamięci (memory leak) – brak
delete. - Dangling pointer – wskaźnik wskazujący na zwolnioną pamięć.
- Wycieku pamięci (memory leak) – brak
- Trudniejsze debugowanie w porównaniu do zmiennych statycznych.
- Wymaga odpowiedzialności przy alokacji i zwalnianiu pamięci.