Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

użycie destruktora obiektu klasy powoduje błąd wykonania programu

Ostatnio zmodyfikowano 2012-02-14 15:38
Autor Wiadomość
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.
C/C++
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(); //tutaj odbywa się zamknięcie funkcji biblioteki TTF
SDL_Quit();

return 0;
}
Nadal nie rozumiem o co tu chodzi
PS. Z SDL nie ma problemu, to TTF robi problem

P-50603
DejaVu
» 2012-02-12 20:41:51
C/C++
{
    Klasa xx;
    //... reszta kodu
}
SDL_QUIT();
P-50604
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?
P-50605
DejaVu
» 2012-02-12 20:53:54
Przecież Ci go podałem i napisałeś, że go rozumiesz...
P-50606
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..
P-50608
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ć.
P-50719
pekfos
» 2012-02-14 15:38:11
Destruktora się nie wywołuje ręcznie.
No może poza jednym małym wyjątkiem :>
P-50747
1 « 2 »
Poprzednia strona Strona 2 z 2