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