A więc problem rysuje się tak (w uproszczeniu bo pomijam kwestie menu oraz intro gry):
- Wchodzę do gry, wskaźnik wskazuje na Poziom1, uruchamia się konstruktor Poziom1, gra ma zużycie, pokazywane przez menadżer zadań, około 15mb.
- Przechodzę Poziom1, zmienna nowaGra zostaje zinkrementowana i wskaźnik wskazuje na Poziom2.
- Przyjmijmy w uproszczeniu, że każdy poziom ma takie same zużycie pamięci. Chciałby uzyskać efekt taki, że kiedy wchodzę do Poziomu2 to zużycie nadal jest 15, a tu jednak wynosi ono 30.
- Wniosek z tego taki wysnułem, że kiedy przechodzę do kolejnych poziomów to te poprzednie gdzieś tam jeszcze zalegają.
Żeby to zobrazować, tak u mnie wyglądają klasy poziomów. Klasa bazowa PoziomBazowy i dziedziczące po niej konkretne poziomy.
class PoziomBazowy
{
protected:
//...
Tekstura Tlo;
Postac Gracz;
sf::Clock timer;
//...
public:
//...
virtual void Wyswietl(sf::RenderWindow &Okno, sf::Event &Zdarzenie, int &kliknieto, int &posX, int &posY, int &nowaGra);
//...
};
//////////////////////////////////////////////////////
class Poziom1: public PoziomBazowy
{
private:
//...
Klucz Klucz;
Drzwi Drzwi;
//itd itd..
public:
void Wyswietl(sf::RenderWindow &Okno, sf::Event &Zdarzenie, int &kliknieto, int &posX, int &posY, int &nowaGra);
//...
};
//////////////////////////////////////////////////////
W klasie Gra w taki sposób zmieniam te poziomy.
PoziomBazowy *Poziom;
// i ustawiam go brzydkimi ifami, ale nie wymyśliłem jeszcze ładniejszego sposobu niż if if-elsy bądź switch.
if(nowaGra == 1) Poziom = new Poziom1();
if(nowaGra == 2) Poziom = new Poziom2();
if(nowaGra == 3) Poziom = new Poziom3();
if(nowaGra == 4) Poziom = new Poziom4();
if(nowaGra == 5) Poziom = new Poziom5();
if(nowaGra == 6) Poziom = new Poziom6();
//i potem wywołanie metody:
Poziom->Wyswietl(*Okno, Zdarzenie, kliknieto, posX, posY, nowaGra);
Co jest nie tak w takim podejściu, że dzieje się coś takiego? Czy to może w ogóle wynikać z tego czy problem raczej jest gdzieś głębiej? W innym temacie proponowano mi użycie shared_ptr, ale dopiero co o nim usłyszałem i nie wiem jak stosuje się inteligentne wskaźniki.