---
# System prepended metadata

title: Memory Managment
tags: [PARO]

---

---
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**.


