-
Data: 2009-07-29 11:53:33
Temat: Re: [c++]Prosta klasa, czemu nie wywołuje destruktorów?
Od: Tomasz Kaczanowski <kaczus@dowyciecia_poczta.onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]P.K.D pisze:
> W dniu 2009-07-28 19:52, grg12 pisze:
>> P.K.D pisze:
>>> Tutaj ta klasa: http://paste.dprogramming.com/dpibqklz
>>>
>>> Chodzi o to, że gdy wywołuję server::clearList() to obiekty nie są
>>> niszczone, chyba dlatego, że lista zawiera wskaźniki. Jak to zrobić i
>>> czy da się zrobić tak, że destruktory będą wywoływane automatycznie?
>>
>> Dokładnie dlatego - masz listę wskaźników na obiekty a nie obiektów -
>> wywoływany jest więc "destruktor" wskaźnika :)
>> Możesz np. w metodzie clearList przelecieć po wszystkich elementach
>> zmiennej "servers" i wywołać ich destruktory np. tak:
>>
>> for(std::list<server *>::iterator ii=servers.begin();ii!=servers.end();
>> ii++)
>> {
>> delete (*ii);
>> }
>>
>> servers.clear();
>>
>> Tyle że ciało tej funkcji prawdopodobnie trzeba będzie zdefiniować poza
>> klasą - w tym miejscu gdzie jest teraz destruktor jeszcze nie jest
>> zadeklarowany.
>>
>> I jeszcze jedno - "delete this" w destruktorze to kiepski pomysł (no
>> chyba że się coś w specyfikacji języka zmieniło?). Normalnie wywołanie
>> destruktora jest konsekwencja wywołania delete - destruktor to "ostatnia
>> szansa na posprzątanie zanim system zwolni pamięć" (np. zwolnić pliki,
>> usunąć podobiekty utworzone przez new). W twoim przypadku destruktor
>> może być pusty - jeśli koniecznie chcesz coś tam mieć - wstaw "std::cout
>> << "obiekt typu server o nazwie"<<name<<" właśnie popełnia
>> seppuku"<<std::endl;
>> Pozdrawiam
>> GRG
>
> Ok, przemyślałem i faktycznie delete this to idiotyzm. Dzięki, że o tym
> wspomniałeś:) W końcu nie miałem wyjścia i zrobiłem swoją funkcję
> clear(), ale myślałem, że może jest jakiś inny sposób przewidziany do
> pracy z takimi listami. No ale niezadowolony jestem, bo chciałbym żeby
> ta lista się sama czyściła. Będę musiał chyba napisać osobną klasę jak
> to Tomasz opisał. Dzięki za odpowiedzi:)
>
Nie - jest bardzo dobrze - to co jest allokowane przez obiekt, czyścić
powinien obiekt, jeśli ty allokujesz, to powinieneś ty zwalniać. Jeśli
byłoby inaczej, nigdy byś nie wiedział, co zwalniać, a co nie i wtedy
byłby bałagan.
--
Kaczus
http://kaczus.republika.pl
Następne wpisy z tego wątku
- 29.07.09 12:29 Tomasz Bywalec
- 29.07.09 12:53 Mateusz Loskot
- 29.07.09 12:54 Mateusz Loskot
- 02.08.09 12:09 Bronek Kozicki
Najnowsze wątki z tej grupy
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
Najnowsze wątki
- 2025-07-22 Genialna toaleta Urobot, automatycznie badająca mocz i kał z Taiwanu
- 2025-07-22 Thunderbird i dysk...
- 2025-07-22 Warszawa => Programista Full Stack .Net <=
- 2025-07-22 Warszawa => Software .Net Developer <=
- 2025-07-22 Warszawa => Asystent ds. Sprzedaży i Rozwoju Klienta <=
- 2025-07-22 Warszawa => Sales Assistant and Customer Development Specialist <=
- 2025-07-22 antyfaszystka
- 2025-07-22 W ogóle nie widać...
- 2025-07-22 I znowu inżynierowie i inżynierzy...
- 2025-07-21 Dokumenty zgromadzone przez Instytut Pamięci
- 2025-07-21 cashback
- 2025-07-21 Pomarańczowy rakietnyj on de telefon ;)
- 2025-07-21 Gdańsk => Kotlin Developer <=
- 2025-07-21 Warszawa => Sales Executive / KAM <=
- 2025-07-21 Gdańsk => Programista Kotlin <=