więcej niż c++. wprowadzenie do bibliotek boost helion, ebooki2
[ Pobierz całość w formacie PDF ] 6 Spis treści Rozdział 3. Biblioteka Utility ........................................................................... 107 Jak ulepszyć własne programy z użyciem biblioteki Utility? ........................................107 BOOST_STATIC_ASSERT ..........................................................................................108 checked_delete ...............................................................................................................110 noncopyable ...................................................................................................................114 addressof .........................................................................................................................119 enable_if .........................................................................................................................121 Utility — podsumowanie ...............................................................................................129 Rozdział 4. Biblioteka Operators ..................................................................... 131 Jak ulepszyć własne programy z użyciem biblioteki Operators? ...................................131 Jak ma się biblioteka Operators do biblioteki standardowej C++? ................................132 Operators ........................................................................................................................132 Stosowanie .....................................................................................................................137 Operators — podsumowanie ..........................................................................................156 Rozdział 5. Biblioteka Regex .......................................................................... 157 Jak ulepszyć własne programy z użyciem biblioteki Regex? ........................................157 Jak ma się biblioteka Regex do biblioteki standardowej C++? .....................................158 Regex ..............................................................................................................................158 Stosowanie ..................................................................................................................... 160 Regex — podsumowanie ...............................................................................................174 Część II Kontenery i struktury danych .......................................175 Rozdział 6. Biblioteka Any .............................................................................. 177 Jak ulepszyć własne programy z użyciem biblioteki Any? ............................................177 Jak ma się biblioteka Any do biblioteki standardowej C++? .........................................178 Any .................................................................................................................................178 Stosowanie .....................................................................................................................181 Any — podsumowanie ...................................................................................................203 Rozdział 7. Biblioteka Variant ......................................................................... 205 Jak ulepszyć własne programy z użyciem biblioteki Variant? ......................................205 Jak ma się biblioteka Variant do biblioteki standardowej C++? ....................................206 Variant ............................................................................................................................206 Stosowanie .....................................................................................................................209 Variant — podsumowanie ..............................................................................................219 Rozdział 8. Biblioteka Tuple ........................................................................... 221 Jak ulepszyć własne programy z użyciem biblioteki Tuple? .........................................221 Jak ma się biblioteka Tuple do biblioteki standardowej C++? ......................................222 Tuple ...............................................................................................................................222 Stosowanie .....................................................................................................................227 Tuple — podsumowanie ................................................................................................243 Część III Obiekty funkcyjne i programowanie wyższego rzędu .....245 Rozdział 9. Biblioteka Bind ............................................................................. 247 Jak ulepszyć własne programy z użyciem biblioteki Bind? ...........................................247 Jak ma się biblioteka Bind do biblioteki standardowej C++? ........................................248 Bind ................................................................................................................................248 Stosowanie .....................................................................................................................249 Bind — podsumowanie ..................................................................................................273 Spis treści 7 Rozdział 10. Biblioteka Lambda ........................................................................ 275 Jak ulepszyć własne programy z użyciem biblioteki Lambda? .....................................275 Jak ma się biblioteka Lambda do biblioteki standardowej języka C++? .......................276 Lambda ...........................................................................................................................277 Stosowanie .....................................................................................................................278 Lambda — podsumowanie .............................................................................................312 Rozdział 11. Biblioteka Function ....................................................................... 313 Jak ulepszyć własne programy z użyciem biblioteki Function? ....................................313 Jak ma się biblioteka Function do biblioteki standardowej języka C++? ......................313 Function ..........................................................................................................................314 Stosowanie .....................................................................................................................317 Function — podsumowanie ...........................................................................................337 Rozdział 12. Biblioteka Signals ......................................................................... 339 Jak ulepszyć własne programy z użyciem biblioteki Signals? .......................................339 Jak ma się biblioteka Signals do biblioteki standardowej języka C++? ........................340 Signals ............................................................................................................................340 Stosowanie .....................................................................................................................343 Signals — podsumowanie ..............................................................................................365 Bibliografia ................................................................................... 367 Skorowidz ..................................................................................... 371 Rozdział 1. Jak ulepszyć własne programy z użyciem biblioteki Smart_ptr? Poprzez automatyczne zarządzanie czasem życia obiektów za pomocą szablonu shared_ptr , bezpiecznie i efektywnie zarządzającego wspólnymi zasobami. Poprzez bezpieczne podglądanie zasobów wspólnych za pomocą szablonu weak_ptr , co eliminuje ryzyko charakterystyczne dla wiszących wskaźników. Poprzez osadzanie zasobów w zasięgach programu za pomocą szablonów scoped_ptr i scoped_array , ułatwiających konserwację kodu i pomocnych przy zabezpieczaniu przed zgubnym wpływem wyjątków. Wskaźniki inteligentne, implementowane w bibliotece Smart_ptr, rozwiązują odwiecz- ny problem zarządzania czasem życia zasobów (chodzi zwykle o zasoby przydzielane dynamicznie 1 ). Inteligentne wskaźniki dostępne są w wielu odmianach. Wszystkie jednak mają jedną cechę wspólną: automatyzację zarządzania zasobami. Ów auto- matyzm manifestuje się rozmaicie, na przykład poprzez kontrolę czasu życia obiek- tów przydzielanych dynamicznie czy też poprzez kontrolę nad akwizycją i zwalnia- niem zasobów (plików, połączeń sieciowych itp.). Wskaźniki inteligentne z biblioteki Boost implementują pierwsze z tych zastosowań, to jest przechowują wskaźniki do dynamicznie przydzielanych obiektów, dbając o ich zwalnianie w odpowiednich mo- mentach. Można się zastanawiać, czy to nie zbytnie ograniczenie ich zadań. Czy nie można by zaimplementować również pozostałych aspektów zarządzania zasobami? Cóż, można by, ale nie za darmo. Rozwiązania ogólne wymagają często większej zło- żoności, a przy inteligentnych wskaźnikach biblioteki Boost główny nacisk położono nawet nie tyle na elastyczność, co na wydajność. Ale dzięki możliwości implementowania 1 Czyli wszelkie zasoby, do których można się odwoływać za pośrednictwem typu wskaźnikowego — również inteligentnego — przyp. aut. 38 Część I Biblioteki ogólnego przeznaczenia własnych mechanizmów zwalniania najbardziej inteligentne ze wskaźników z rodziny Boost ( boost::shared_ptr ) mogą obsługiwać zasoby wymagające przy zwalnianiu bardziej wyrafinowanych operacji niż proste wywołanie delete . Pięć implementacji wskaźników inteligentnych w bibliotece Boost.Smart_ptr odzwierciedla zaś szereg kategorii potrzeb pojawiających się w programowaniu. Po co nam inteligentne wskaźniki? Po co nam inteligentne wskaźniki? Wskaźniki inteligentne stosuje się przy: manipulowaniu zasobami pozostającymi w posiadaniu wielu obiektów, pisaniu kodu odpornego na wyjątki, unikaniu typowych błędów w postaci wycieków zasobów. Współdzielenie własności zachodzi, kiedy dany obiekt jest użytkowany przez pewną liczbę innych obiektów. Jak (albo raczej: kiedy) należy zwolnić ów używany obiekt? Aby rozpoznać odpowiedni moment zwolnienia współużytkowanego obiektu, nale- żałoby wyposażyć każdy z obiektów użytkujących w informacje o współwłaścicielach. Tego rodzaju wiązanie obiektów nie jest pożądane z punktu widzenia poprawności projektowej, a także z uwagi na łatwość konserwacji kodu. Lepiej byłoby, aby obiek- ty-współwłaściciele złożyły odpowiedzialność za zarządzanie czasem życia współużyt- kowanego obiektu na inteligentny wskaźnik. Ten, po wykryciu, że nie ma już żadnego właściciela, może bezpiecznie zwolnić obiekt użytkowany. Odporność na wyjątki to w najprostszym ujęciu zabezpieczenie przed wyciekami za- sobów, jak również zabezpieczenie trwałości niezmienników programu w obliczu wyjątków. Obiekt przydzielony dynamicznie może w obliczu wyjątku nie zostać zwol- niony. W ramach procedury zwijania stosu przy zrzucaniu wyjątku i porzucaniu bie- żącego zasięgu dojdzie do utracenia wskaźników obiektów dynamicznych, co uniemoż- liwi zwolnienie obiektu aż do momentu zakończenia programu (a i w fazie końcowej programu język nie daje gwarancji zwolnienia zasobów). Program niezabezpieczony przed takim wpływem wyjątków może nie tylko doprowadzić do deficytu pamięci operacyjnej, ale i znaleźć się w niestabilnym stanie; zastosowanie wskaźników inteli- gentnych automatyzuje zwalnianie zasobów nawet w obliczu wyjątków. Co do unikania typowych błędów , to najbardziej typowym jest chyba pominięcie (wyni- kające z przeoczenia) wywołania delete . Tymczasem typowy inteligentny wskaźnik nie śledzi bynajmniej ścieżek przebiegu wykonania programu — jego jedyną troską jest zwolnienie wskazywanego obiektu wywołaniem delete w ramach własnej de- strukcji. Stosowanie inteligentnych wskaźników zwalnia więc programistę od ko- nieczności śledzenia pożądanych momentów zwalniania obiektów. Do tego inteligentne wskaźniki mogą ukrywać szczegóły dealokacji, dzięki czemu klienci nie muszą wie-
[ Pobierz całość w formacie PDF ]
zanotowane.pldoc.pisz.plpdf.pisz.plmement.xlx.pl
|