-
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
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- 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ą."
Najnowsze wątki
- 2025-08-06 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML