użycie destruktora obiektu klasy powoduje błąd wykonania programu
Ostatnio zmodyfikowano 2012-02-14 15:38
mostrom Temat założony przez niniejszego użytkownika |
» 2012-02-12 20:40:22 To jak zmienić kolejność zamykania poszczególnych rzeczy?? TTF_Quit() Wywołuję ręcznie, a na TTF_CloseFont() nie mam wpływu, bo znajduje się w destruktorze. guzik::~guzik() { TTF_CloseFont( font ); SDL_FreeSurface( sTekst ); }
int main( int argc, char * argv[] ) { init(); ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE ); guzik guz( ekran, 200, 300, 100, 25 ); while( zamknij != true ) { if( guz_Wyjscie.input( event, myszX, myszY ) ) zamknij = true; } guz.show( ekran ); SDL_Flip( ekran ); }
TTF_Quit(); SDL_Quit();
return 0; } Nadal nie rozumiem o co tu chodzi PS. Z SDL nie ma problemu, to TTF robi problem |
|
DejaVu |
» 2012-02-12 20:41:51 |
|
mostrom Temat założony przez niniejszego użytkownika |
» 2012-02-12 20:51:56 Ok, ten schemat rozumiem, dzięki. Powiem jak rozwiązałem problem wedle tego schematu. Zmieniłem obiekt "guz" klasy guzik na wskaźnik do obiektu klasy guzik za pomocą słowa kluczowego new i usunąłem go za pomocą "delete" PRZED TTF_Quit(). To rozwiązanie jest o tyle dobre, że sam kontroluję kiedy jest użyty destruktor - używając słowa delete.
Jednak szczerze mówiąc mało mnie interesuje obsługa zwykłych guzików w wskaźnikach, bo to będzie bardzo uciążliwe do ogarnięcia. Jest inny sposób rozwiązania problemu bez wskaźników? |
|
DejaVu |
» 2012-02-12 20:53:54 Przecież Ci go podałem i napisałeś, że go rozumiesz... |
|
mostrom Temat założony przez niniejszego użytkownika |
» 2012-02-12 20:59:11 No, bo go rozumiem, ale nie umiem zapanować nad wywołaniem destruktora obiektów nie-wskaźnikowych. Bo podczas całego tego tematu dowiedziałem się że destruktor obiektu, który korzysta z obiektów SDL będzie uruchamiany niestety PO funkcji SDL_Quit(), o ile nie zakończe trwania tego obiektu słowem "delete". Stąd moje ostatnie pytanie, czy nie można jawnie wcześniej zniszczyć dynamicznych pól statycznego obiektu.. |
|
kamillo121 |
» 2012-02-14 08:32:30 DejaVu przeznaczył swój czas na wyjaśnienie problemu a tym zamiast nauczyć się używać destruktorów to pytasz o to samo w kółko tylko używając innej sentencji zdań(i nie mów mi że potrafisz ich używać bo tak nie jest). Przed usuwaniem fontów sprawdzaj czy font nie jest pusty(czy poprawnie się załadował). Stąd moje ostatnie pytanie, czy nie można jawnie wcześniej zniszczyć dynamicznych pól statycznego obiektu
|
Jeżeli obiekt jest faktycznie statyczny a ma przydzielaną dynamicznie pamięć dla pól to wystarczy stworzyć metodę dla obiektu która usunie tą pamięć za pomocą delete i która zostanie wywołana np. ręcznie pod koniec jakiejś tam sekcji(mówię tutaj o pamięci na którą masz wskaźnik i sam ją przydzieliłeś). Powtórzę tylko, że jeden temat = jeden problem i tego radzę się trzymać. |
|
pekfos |
» 2012-02-14 15:38:11 Destruktora się nie wywołuje ręcznie. |
No może poza jednym małym wyjątkiem :> |
|
1 « 2 » |