From 0dfdd9daef1043117f1c6bbd5d926c5ecbbe3c8d Mon Sep 17 00:00:00 2001
From: fsimonsen <fredersi@stud.ntnu.no>
Date: Wed, 6 Apr 2022 12:21:13 +0200
Subject: [PATCH] destructorer

---
 rute.cpp         | 18 ++++++++++++++++++
 rute.h           |  1 +
 ruter.cpp        | 12 +++++++++++-
 ruter.h          |  1 +
 stoppested.cpp   |  8 ++++++++
 stoppested.h     |  1 +
 stoppesteder.cpp |  9 +++++++++
 stoppesteder.h   |  1 +
 8 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/rute.cpp b/rute.cpp
index 14b0f66..8647da2 100644
--- a/rute.cpp
+++ b/rute.cpp
@@ -89,6 +89,15 @@ Rute::Rute(ifstream & inn) {
     }
 }
 
+/**
+ * Sletter alt minne allokert ifm. Rute-listen
+ */
+Rute::~Rute() {
+    for (auto it = stoppene.begin(); it != stoppene.end(); it++)
+        delete (*it); // Sletter det tilpekte
+    stoppene.clear(); // Tømmer listen for pekere
+}
+
 /**
  * Sjekker om et sluttsted ifm. smetting av stopper er før på ruten
  * enn startstedet i intervallet for hvor stopper skal smettes
@@ -974,6 +983,15 @@ void Rute::smettStopp() {
             cout << '\n';
             skrivRute(Fram); // skriver oppdatert rute forlengs
         }
+    } else { // Ikke lagt til stopp på ruten pga sent uthopp:
+        delete fStopp; // Sletter evt. allokert minne:
+        delete aStopp;
+        delete nStopp;
+        delete tempStopp;
+        delete fStoppested;
+        delete aStoppested;
+        delete nStoppested;
+        delete tempStoppested;
     }
 }
 
diff --git a/rute.h b/rute.h
index 6e8f0d0..b609e47 100644
--- a/rute.h
+++ b/rute.h
@@ -35,6 +35,7 @@ class Rute {
     public:
         Rute();
         Rute(std::ifstream & inn);
+        ~Rute();
         bool erForst(Stopp* s1, Stopp* s2);
         bool erListeGyldig();
         bool erNabo(Stopp* s1, Stopp* s2);
diff --git a/ruter.cpp b/ruter.cpp
index 964d444..fbdefdf 100644
--- a/ruter.cpp
+++ b/ruter.cpp
@@ -18,6 +18,14 @@ using namespace std;
 
 extern Stoppesteder gStoppestederBase; // Henter inn globalt objekt
 
+/**
+ * Sletter allokert minne i Ruter-mappet
+ */
+Ruter::~Ruter() {
+    for (auto it = rutene.begin(); it != rutene.end(); it++)
+        delete it->second; // Sletter det tilpekte
+    rutene.clear(); // Tømmer mappet for pekere
+}
 
 /**
  * Sjekker om et gitt ruteNr finnes i datastrukturen
@@ -156,8 +164,10 @@ void Ruter::nyRute() {
                 rutene[ruteNr] = nyRute; // Lagrer ruten
                 cout << "\nNy rute er lagt til:\n";
                 ruteBeskrivelse(ruteNr); // Skriver ut ruten
-            } else 
+            } else {
                 nyRute->slettData(); // <1 stopp, sletter ruten
+                delete nyRute; // Sletter peker, ved ugyldig rute
+            }
 
         } else // Rutenummer er duplikat:
             cout << "\nRutenummeret finnes fra før. Kan ikke legge til rute.\n\n";
diff --git a/ruter.h b/ruter.h
index 744747d..ab4a8d2 100644
--- a/ruter.h
+++ b/ruter.h
@@ -17,6 +17,7 @@ class Ruter {
     private:
         std::map <int, Rute*> rutene;
     public:
+        ~Ruter();
         bool ruteNrFinnes(const int ruteNr);
         void endreRute();
         void handling();
diff --git a/stoppested.cpp b/stoppested.cpp
index 8f36ae4..e10825c 100644
--- a/stoppested.cpp
+++ b/stoppested.cpp
@@ -52,6 +52,14 @@ Stoppested::Stoppested(const std::string nvn, ifstream & inn) {
         inn.ignore(); // Forkaster enter hvis det finnes naboer
 }
 
+/**
+ * Tømmer et stoppesteds vektorer for innhold
+ */
+Stoppested::~Stoppested() {
+    nabostopper.clear(); // Tømmer vektor med nabostopp nummere
+    tidtilnabo.clear(); // Tømmer vektor med tid til de ulike naboene
+}
+
 /**
  * Sjekker om et Stoppested har en gitt nabo
  * 
diff --git a/stoppested.h b/stoppested.h
index 360b0cd..c3f394c 100644
--- a/stoppested.h
+++ b/stoppested.h
@@ -24,6 +24,7 @@ class Stoppested {
     public:
         Stoppested(const std::string nvn);
         Stoppested(const std::string nvn, std::ifstream & inn);
+        ~Stoppested();
         bool finnesNabo(const int nr);
         int hentNaboIndeks(const int nr);
         int hentNaboTid(const int nr);
diff --git a/stoppesteder.cpp b/stoppesteder.cpp
index 5585a51..7587911 100644
--- a/stoppesteder.cpp
+++ b/stoppesteder.cpp
@@ -15,6 +15,15 @@
 #include "stoppesteder.h"
 using namespace std;
 
+/**
+ * Sletter minne allokert med Stoppesteder
+ */
+Stoppesteder::~Stoppesteder() {
+    for (int i = 0; i < stopper.size(); i++)
+        delete stopper[i]; // Sletter det tilpekte
+    stopper.clear(); // Tømmer vektor for pekere
+}
+
 /**
  * Sjekker om en stoppesteds indeks finnes i vektoren
  *
diff --git a/stoppesteder.h b/stoppesteder.h
index e7b1ac2..d462067 100644
--- a/stoppesteder.h
+++ b/stoppesteder.h
@@ -19,6 +19,7 @@ class Stoppesteder {
     private:
         std::vector <Stoppested*> stopper;
     public:
+        ~Stoppesteder();
         bool finnesIndeks(const int nr);
         bool ikkeHarTall(const std::string nvn);
         bool tom();
-- 
GitLab