Wszystkie ćwiczenia


Ćwiczenia 10

Mądre wskaźniki

Zadanie 0

Stwórz własną klasę. Napisz destruktor tak, aby wyświetlał tekst na konsoli.

W metodzie main utwórz dynamicznie nowy obiekt tej klasy (poprzez "new").

Czy destruktor wykona się sam, automatycznie?

Zadanie 1

Zmień ciało funkcji main tak, aby program sam zwalniał pamięć, ale nie używaj słowa "delete".


unique_ptr<A> smart_a(new A(20)); // Używamy słowa new, ale opakowujemy w unique_ptr
cout << smart_a->i << endl; // smart_a traktujemy jak wskaźnik
    

Rodzaje smart poitners

  • unique_ptr - mamy monopol na obiekt; kiedy niszczony jest wskaźnik, niszczony jest obiekt
  • shared_ptr - współdzielimy obiekt z innymi wskaźnikami; jeśli nasz wskaźnik zostanie zniszczony i był ostatnim, który pokazywał na obiekt, to obiekt zostaje zniszczony
  • weak_ptr - wskaźnik, który tylko widzi obiekt; może pokazywać na zniszczony obiekt; nie podtrzymuje obiektu przy życiu

Zadanie 2

Przygotuj strukturę listy dwukierunkowej. Jeśli element ma kolejny, to utrzymuje go przy życiu. Każdy kolejny elementy "tylko widzi" poprzednika. Stwórz listę 4 elementową. Zbadaj, czy pamięć jest dobrze zwalniania poprzez wypisywanie komunikatów w destruktorach.

Zadanie 3

Zaimplementuj poniższy diagram klas.

Diagram klas dla zadania

Pojedynczny diagram klas UML dla Świata, Państw i Firm

Założenia biznesowe

  1. Światy nie dzielą się państwami.
  2. Państwo może istnieć bez żadnej firmy.
  3. Jeśli usuniemy państwo, a firma nie ma już innych państw do których należy, to niszczymy firmę.
  4. Usunięcie świata niszczy wszystkie państwa i firmy w tych państwach.