Język C++ nie był by sobą, gdyby nie szablony. Kiedy chcemy napisać jakiś szablon klasy lub funkcji, która manipuluje zasobem, chcielibyśmy dać jej użytkownikowi możliwość zdecydowania, czy zasób ten daje nam na wyłączność, czy musimy go sobie skopiować. To zadanie ułatwiać ma nam uniwersalna referencja, która jest domeną wyłącznie funkcji szablonowych.... więcej
W poprzednich dwóch częściach tego cyklu artykułów wyjaśniliśmy sobie rzeczy, które powinny być podstawą podczas pisania eleganckiego kodu w C++. W tej części przyjrzymy się bardziej niskopoziomowym aspektom języka związanym z zarządzaniem zasobami. Mogą być one jednak trudniejsze w zrozumieniu. Nie są jednak bardzo istotne z punktu widzenia programisty, dlatego nie polecam tego artykułu początkującym – mógłbym ich odstraszyć. Wszystkich innych zapraszam do lektury.... więcej
W drugiej części cyklu o zarządzaniu zasobami bierzemy na tapet konstrukcje, z którymi dość trudno było się oswoić programistom C++ po wprowadzeniu go do języka w 2011 roku – semantyką przenoszenia. Na początku pokażemy jednak, dlaczego zaistniała potrzeba jej wprowadzenia, poprzez objaśnienie wyraźnej luki w dotychczasowym standardzie C++. Po zrozumieniu tej potrzeby, na pewno łatwiej jest zrozumieć istotę „wynalazku”. @page { margin: 2cm } p { margin-bottom: 0.25cm; line-height: 115% } ... więcej
Podczas rozwoju różnych technologii proces ewolucji czasami jest na tyle duży, że mamy do czynienia z rewolucją. Z tego powodu C++ stał się odrębnym językiem w porównaniu do C. Często jest tak, że kod poprawny w C może być niepoprawny w C++. Najbardziej chyba rewolucyjną przemianą wprowadzoną do C++ są obszary zarządzania zasobami. Podejście znane z C może być nadal używane w C++, ale bądźmy szczerzy – jest to bardzo kiepski pomysł. Zobaczmy, jak dziś zarządzać zasobami w sposób poprawny i nowoczesny.... więcej
Późna inicjalizacja to wzorzec projektowy wykorzystywany w praktycznie każdym języku. Jego zaletą jest przesunięcie w czasie konstrukcji jakiegoś obiektu, która jest w jakiś sposób kosztowna, lub jej całkowite uniknięcie, jeżeli akurat tak się złoży, że dany obiekt w ogóle nie będzie potrzebny. Spójrzmy jak zaimplementować ten wzorzec poprawnie w C++.... więcej
W świecie programistów można spotkać opinie, że C++ poprzez zwiększenie poziomu abstrakcji utracił na wydajności w stosunku do starego, dobrego i szybkiego C. Zbadajmy więc, czy ta opinia ma odzwierciedlenie w rzeczywistości.... więcej