wiecej-niz-c++.-wprowadzenie-do-bibliotek-boost- full version.pdf

(10119 KB) Pobierz
887649302.001.png
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.
887649302.002.png
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-
Zgłoś jeśli naruszono regulamin