Temat: Rynek IT z C C++
Piotr Pszczolkowski:
Zdecydowanie nie.
Referencje maja absolutne pierwszenstwo przed pointerami.
Nawet Brian Stroustrup twierdzi odwrotnie...
Przemysław O.:
Przyznam, że wyższość gołych pointerów nad smart jest dla mnie nowością i chętnie dowiem się więcej o tym podejściu...
Podejście nazywa się KISS i w zarysie polega na tym że wszystko co mniejsze, szybsze i prostsze jest lepsze od tego co większe, wolniejsze i bardziej skomplikowane (a robi to samo).
Z tego podejścia wywodzi się C i wydaje mi się że dla nie lubiących go jest mnóstwo lepszych, wysokopoziomowych języków (np gdzie wszystko jest smartpointerem).
Co do referencji to przyznam, że trudno mi skomentować.
Patrz na słowa człowieka który wprowadził referencje do języka.
Moja opinia jest taka:
Referencje:
Referencje zostały wprowadzone tylko z powodu operatorów. W C nie pisało się & przed każdym += więc potrzebny był jakiś dirty hack żeby C++ wyglądało tak samo. Referencje na ratunek.
To że sytuacja raz zmusiła do takiego triku jeszcze nie znaczy że warto go używać zawsze.
Nie lubię referencji bo nie wiadomo czy została zdereferencjonowana z NULLa dopóki się nie wywali. No a ja siakoś nie kocham try ani catch. Jasne, tylko złośliwy idiota podaje NULLa do funkcji przyjmującej referencje. Niemniej jednak idioci istnieją i używając referencji ani trochę nie zabezpieczasz się przed NULLem, a jedynie odcinasz się od wiedzy o nim.
Referencja zaciemnia kod, gdyż wewnątrz nie wiadomo czy się pracuje na kopii czy na oryginale. Również widząc wywołanie funkcji nie mogę powiedzieć czy jej parametry zostaną zmodyfikowane czy nie (oczywiście są consty, ale do tego trzeba widzieć definicję).
Przykład:
int iCostam = 5;
SiakasFunkcja(iCostam);
Powiedzcie mi teraz, jaką teraz wartość ma iCostam ? W kodzie bez referencji widzisz to co powyżej albo:
InnaFunkcja(&iCostam);
I od razu wiadomo co jest co.
To bardzo miłe móc do wszystkiego odwoływać się tak samo, ja jednak wolę na pierwszy rzut oka wiedzieć z jakim obiektem mam do czynienia.
Referencja tak naprawdę jest zwyczajnym wskaźnikiem. Więc po co samych siebie okłamywać?
Smart pointery:
Wcale nie twierdzę że smarty to zło. Ale dopóki wiadomo odkąd dokąd obiekt istnieje to zysk z nich jest zerowy.
Smarty eliminują jedne bugi, a wprowadzają inne. Tymczasem obiekty nie zwolnione na skutek kołowej zależności są o wiele trudniejsze do zauważenia i zdebugowania niż crash na NULLu.
Jestem człowiekiem i popełniam błędy, ale wolę widzieć je od razu.
Szymon Kubisiak edytował(a) ten post dnia 01.10.08 o godzinie 10:38