Thread View: pl.comp.lang.c
3 messages
3 total messages
Started by Karpierz
Mon, 01 Dec 1997 21:35
Problem z konstruktorem kopiujacym
Author: Karpierz
Date: Mon, 01 Dec 1997 21:35
Date: Mon, 01 Dec 1997 21:35
21 lines
1695 bytes
1695 bytes
Witam wszystkich piszacych w C++. Mam prosbe o podanie rozwiazania problemu (dla mnie dosc powaznego). Jak mianowicie wykryc na etapie kompilacji wszystkie miejsca w ktorych jest wywolywany konstruktor kopiujacy danej klasy. Reczne przegladanie programu nie wchodzi w gre gdyz kod zrodlowy liczy ok 8MB. Problem jest o tyle zlozony ze klasa jest nieporzadnie zaprojektowana i program niekiedy ma prawo sie wysypac jezeli jest tworzony dynamicznie lub na stosie nowy obiekt tej klasy. Mozliwe jest jedynie referencyjne odwolanie do obiektu stworzonego raz przy starcie programu. Podobna sprawa jest z operatorem przypisania ale tu jest mozliwosc takiej sztucznej jego implementacji ze zwracanym wynikiem bedzie jakis sztuczny typ lub void i kompilator sie zbuntuje. W przypadku konstruktora kopiujacego niestety ta metoda nie jest mozliwa. Opuszczenia konstruktora spowoduje wygenerowania domyslnego wiec tez nic to nie da. Wszelkie pomysly mile widziane ! :) Z gory dziekuje za pomoc. -- Pozdrawiam Adam Karpierz mailto:karpierz@intertele.pl http://www.intertele.pl/users/karpierz
Re: Problem z konstruktorem kopiujacym
Author: Stanislaw Bochnak
Date: Tue, 02 Dec 1997 11:54
Date: Tue, 02 Dec 1997 11:54
26 lines
1599 bytes
1599 bytes
1) Zadeklaruj konstruktor kopiujacy jako prywatny i nie definuj jego implementacji. Podobnie zrob z operatorem przypisania. Dzieki temu zapobiegniesz wygenerowaniu domyslnych konstruktorow. Potem trzeba zrekompilowac i zlinkowac system. Linker zglosi Ci moduly, w ktorych te funkcje byly uzywane. 2) Zdefiniuj konstruktor z instrukcja __asm int 3, w srodku. Jesli zostanie wywolany, wygeneruje tzw. breakpoint. Zalety i wady: 1) + automatycznie znajdzie wszystkie moduly - w samym module trzeba sie "martwic" samemu - po prostu przeglad kodu. 2) + ogladajac stos wywolan dokladnie wiesz, skad wywolano Twoj konstruktor - nie masz gwarancji, ze podales wszystkie mozliwe sekwencje wejsciowe i tym samym, ze znalazles wszystkie wywolania! Moze trzeba by zastosowac mieszanke obydwu w podanej wyzej kolejnosci. Pozdrawiam, Stanislaw Bochnak
Re: Problem z konstruktorem kopiujacym
Author: Karpierz
Date: Tue, 02 Dec 1997 18:21
Date: Tue, 02 Dec 1997 18:21
13 lines
1274 bytes
1274 bytes
Stanislaw Bochnak <S.Bochnak@microTOOL.com.pl_nospam> napisal > 1) Zadeklaruj konstruktor kopiujacy jako prywatny i nie definuj jego > implementacji. > Podobnie zrob z operatorem przypisania. Dziekuje za pomoc. Problem zniknal :) -- Pozdrawiam Adam Karpierz mailto:karpierz@intertele.pl http://www.intertele.pl/users/karpierz
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads