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 new do alokacji pamięci dynamicznej.
  • Operator new zwraca wskaźnik do zaalokowanej pamięci.

Składnia:

Przykład:

  • liczba jest wskaźnikiem na zmienną typu int utworzoną 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ęć.
  • Trudniejsze debugowanie w porównaniu do zmiennych statycznych.
  • Wymaga odpowiedzialności przy alokacji i zwalnianiu pamięci.