A więc tak: robię grę, która w mainie ma tylko obiekt klasy Gra i wywołuje funkcje Gra.Wyswietl(...);
Klasa Gra w zależności od zmiennej statusGry, włącza kolejne poziomy w taki sposób (w uproszczeniu napisałem, żeby zawrzeć sens):
switch(statusGry)
{
case 1:
WyswietlPoziom<Poziom1>(*Okno, Zdarzenie, kliknieto, posX, posY, statusGry);
break;
case 2:
WyswietlPoziom<Poziom2>(*Okno, Zdarzenie, kliknieto, posX, posY, statusGry);
break;
case 3:
WyswietlPoziom<Poziom3>(*Okno, Zdarzenie, kliknieto, posX, posY, statusGry);
break;
}
Natomiast szablon wygląda tak:
template<class T>void Gra::WyswietlPoziom(sf::RenderWindow &Okno, sf::Event &Zdarzenie, int &kliknieto, int &posX, int &posY, int &statusGry)
{
static T T;
//(...)
T.Wyswietl(Okno, Zdarzenie, kliknieto, posX, posY, statusGry);
}
Problem jest taki. Jestem powiedzmy w pierwszym poziomie - gra zużywa 30 mb pamięci. Wchodzę do drugiego poziomu gra zużywa 45mb, trzeci poziom 60mb, itd. Wnioskuję, że gra zużywa jej coraz więcej, bo mimo, że jestem w Poziomie2 to cały czas istnieje statyczny Poziom1, itd.
I tu się pojawia problem? Jak "zwolnić" taką zmienną statyczną zaraz po zmianie statusuGry albo jak zrobić to w inny sposób. Chodzi mi o takie rozwiązanie, żeby dla danej wartości statusGry istniał obiekt tylko jednego poziomu, a nie też tych poprzednich. Wskaźnik do obiektu klasy bazowej, który wskazuje w danej chwili na dany obiekt klasy pochodnej czyli polimorfizm? Czy jak myślicie?
Dziękuje z góry za pomoc.