---
title: Memory Managment
author: Mateusz Reis
tags: PARO
---
# Raport - Memory Managment
## Zadanie 1
W example1 zaalokowaliśmy pamięć dla int-a ale nigdy jej nie zwolniliśmy, aby to zrobić dodajemy przed return-em delete.
## Zadanie 2
Podobnie jak w example1, tutaj zapomnieliśmy o zwolnieniu zaalokowanej pamięci. W vectorze znajdują się wskaźniki do pamięci, więc każdy musimy zwolnić po kolei, do wykonanania rej operacji używamy wcześniej zdefiniowanej funkcji deallocateInts().
## Zadanie 3
Wyjątek może zostać rzucony przed zwolnieniem pamięci, więc pamięć zwolnimy po wykoaniu *try-catch*.
## Zadanie 4
Zmieniamy klasyczny wskaźnik na smart-pointer, który zwolni za nas pamięć po tym jak obiekt klasy *MyPointer* zostanie usunięty.
## Zadanie 5
Zgodnie z instrukcją używamy *unique_pointer*. Pozwala to znacznie uprościć kod oraz pozwala uniknąć wycieków pamięci. Także early return-y możemy pozbawić nawiasów co dodatkowo poprawia czytelność.
## Zadanie 6
Otwieramy plik przy pomocy **fopen** w funkcji *makeFile*, piszemy przy pomocy **fprintf** w funkcji *addToFile*. Dodatkowo przy tworzeniu smart pointera, podajemy niestanadarowy deleter, który zamknie plik przy pomocy **fclose**.