Rozdział 23 Powszechne praktyki Rozdział ten ma za zadanie pokazać powszechnie stosowane metody programowania w C. Nie będziemy tu uczyć, jak należy stawiać nawiasy klamrowe ani który sposób nazew- nictwa zmiennych jest najlepszy — prowadzone są o to spory, z których niewiele wynika. Zaprezentowane tu rozwiązania mają konkretny wpływ na jakość tworzonych programów. Konstruktory i destruktory W większości obiektowych języków programowania obiekty nie mogą być tworzone bez- pośrednio — obiekty otrzymuje się wywołując specjalną metodę danej klasy, zwaną konstruk- torem. Konstruktory są ważne, ponieważ pozwalają zapewnić obiektowi odpowiedni stan po- czątkowy. Destruktory, wywoływane na końcu czasu życia obiektu, są istotne, gdy obiekt ma wyłączny dostęp do pewnych zasobów i konieczne jest upewnienie się, czy te zasoby zostaną zwolnione. Ponieważ C nie jest językiem obiektowym, nie ma wbudowanego wsparcia dla konstrukto- rów i destruktorów. Często programiści bezpośrednio modyfikują tworzone obiekty i struktury. Jednakże prowadzi to do potencjalnych błędów, ponieważ operacje na obiekcie mogą się nie powieść lub zachować się nieprzewidywalnie, jeśli obiekt nie został prawidłowo zainicjalizowa- ny. Lepszym podejściem jest stworzenie funkcji, która tworzy instancję obiektu, ewentualnie przyjmując pewne parametry: struct string { size_t size; char *data; }; struct string *create_string(const char *initial) { assert (initial != NULL); struct string *new_string = malloc(sizeof(*new_string)); if (new_string != NULL) { new_string-size = strlen(initial); new_string-data = strdup(initial); } return new_string; } Podobnie, bezpośrednie usuwanie obiektów może nie do końca się udać, prowadząc do wycieku zasobów. Lepiej jest użyć destruktora: 165
... zobacz całą notatkę
Komentarze użytkowników (0)