LordLost Napisano Czerwiec 18, 2011 Zgłoś Share Napisano Czerwiec 18, 2011 Witam, mam problem z napisaniem destruktora i mam kilka pytań jak to zrobić: 1. Czy instancja klasy dziedziczącej po TComponent powinien być zwalniany w zdarzeniu onClose formy jeśli do niej należy? Wydaje mi się, że destruktor formy niszczy swoje komponenty automatycznie, ale głowy bym nie dał. 2. Czy w destruktorze mojej klasy muszę 'uwalniać' obiekty(instancje innych klas), które są jego polami. W tym miejscu nie mam pojęcia, oglądałem przykłady i niektórzy zwalniają inni nie, albo zwalniają tylko niektóre. W pewnej książce, którą posiadam napisane jest, że odziedziczony destruktor nie zwalnia instancji tych klas więc muszę przedefiniować destruktor? Podobno trudniej jest tworzyć niż niszczyć Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Czerwiec 19, 2011 Zgłoś Share Napisano Czerwiec 19, 2011 Tak musisz zniszczyć wszystkie obiekty które utworzyłeś. Jeżeli odziedziczyłeś klase i stworzyłeś swój destruktor to oczywiste, że tamten z klasy bazowej się nie uruchomi, musisz w swoim napisać inherited najlepiej jako ostatnią insrukcję w swoim destruktorze. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Czerwiec 19, 2011 Zgłoś Share Napisano Czerwiec 19, 2011 niszczyc komponenty raczej w onDestroy jesli tworzysz je w onCreate. Jesli tworzysz w onShow to niszczysz w onClose. Ale tutaj osteoznie jesli tworzysz komponent z parentem np TButton.create(form1) to nie niszcz recznie, forma juz to zrobi za ciebie, jesli tworzysz TButton.create(nil) to sam zarzadzasz obiektem. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
LordLost Napisano Czerwiec 19, 2011 Autor Zgłoś Share Napisano Czerwiec 19, 2011 Czyli zwalniam instancje klas w destruktorze przez 'FreeAndNil', a rekordy i wskaźniki mogę zostawić w spokoju, czy przypisywać im nil? Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Czerwiec 19, 2011 Zgłoś Share Napisano Czerwiec 19, 2011 Ogólnie jak masz takie coś Tklaska = class fInnaKlasa: TInnaKlasa; fRekord: TRekord; end; to w konstruktorze masz constructor TKlaska.create; begin fInnaKlasa := TInnaKlasa.Create; end; a w destruktorze destructor destroy;override; begin FreeAndNil(fInnaKlasa); inhrited; end; to co tworzysz jawnie, jawnie niszczysz Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
LordLost Napisano Czerwiec 19, 2011 Autor Zgłoś Share Napisano Czerwiec 19, 2011 Dzięki za pomoc, już w sumie wszystko mam Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.