-
Data: 2012-07-06 16:01:34
Temat: Re: Co może robić konstruktor i dlaczego nie?
Od: "slawek" <h...@s...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Użytkownik "Andrzej Jarzabek" napisał w wiadomości grup
dyskusyjnych:1e74e8d1-f280-479f-96a7-fa085ecea990@n1
6g2000vbn.googlegroups.com...
>konstruowany. Czyli jeśli masz klasę B, która wywołuje swój 'run' w
>konstruktorze, tworzysz dziedziczącą po niej klasę D, która nadpisuje
>funkcje wirtualne klasy B, to wywołania tych funkcji w 'run' nadal
>wywołują funkcje zdediniowane dla B, nie te dla D. Nie mówiąc już o
To jest chore.
Ale czas na PODSUMOWANIE...
Pomysł, aby w duchu RAII odpalać np. wątek itp. przez wywołanie
konstruktora, tj. przez samo skonstruowanie obiektu pewnej klasy (w dalszej
dyskusji nazywanej Foo) może być kłopotliwy... bardziej niż np. wywoływanie
dodatkowej publicznej metody run(), a to dlatego że:
1. różne języki w różny sposób rozumieją konstruktor i nie jest on
zupełnie-taką-samą-metodą-jak-inne (vtable, wyjątki), problemy z
dziedziczeniem;
2. możliwe jest przypadkowe stworzenie obiektu tymczasowego (co może w
niezamierzony sposób zrobić coś, czego nie chcielibyśmy);
3. konstruktor powinien zawierać wyłącznie te operacje, które nie mają
efektów ubocznych innych niż tworzenie obiektów powiązanych z daną klasą.
Punkt 3. można tak rozwinąć: konstruktor może tworzyć obiekty zagregowanie,
lecz konsekwentne stosowanie reguły będzie chronić przed nieodwracalnymi
efektami ubocznymi i w tym przypadku. Zawsze należy dążyć do tego, aby para
wywołań konstruktor-destruktor (bez jakichkolwiek innych pomiędzy) była bez
znaczenia dla działania programu. (A ten postulat nie jest spełniony, gdy
konstruktor zawiera nietrywialny run(), tj. wywołanie
procedury/funkcji/metody/czegokolwiek co niesie ze sobą nieodwracalne skutki
np. otwarcie pliku do zapisu i skasowanie w nim "starych" danych.)
Następne wpisy z tego wątku
- 06.07.12 16:13 AK
- 06.07.12 16:33 Edek Pienkowski
- 06.07.12 19:11 Bogusław Szczepanowski
- 06.07.12 19:20 AK
- 06.07.12 20:38 slawek
- 06.07.12 20:55 Edek Pienkowski
- 07.07.12 10:54 Bogusław Szczepanowski
- 07.07.12 10:59 Bogusław Szczepanowski
- 07.07.12 12:13 AK
- 07.07.12 12:28 Edek Pienkowski
- 07.07.12 12:36 Michoo
- 07.07.12 19:29 slawek
- 09.07.12 12:38 Artur M. Piwko
- 11.07.12 13:49 AK
- 11.07.12 23:59 Michoo
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-20 Precedensy politycznie motywowanego nie wydawania w UE
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Gdańsk => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-20 czyste powietrze
- 2024-12-20 Katowice => Analyst in the Trade Development department (experience wi
- 2024-12-20 Opole => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-12-20 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-20 Rzeszów => International Freight Forwarder <=
- 2024-12-20 Katowice => Key Account Manager (ERP) <=
- 2024-12-20 Ekstradycja
- 2024-12-20 Mikroskop 3D
- 2024-12-20 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-20 Warszawa => Analityk w dziale Trade Development (doświadczenie z Powe