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
Jednym z potężniejszych wykorzystań std::variant niewątpliwie jest implementacja Maszyny Stanowej. Jakiś czas temu przygotowałem prosty przykład tego wzorca. Dzisiaj jednak mamy coś większego. W dzisiejszym wpisie przygotowanym przez Nikolai Wuttke zobaczycie, jak wykorzystać std::variant przy budowie gry kosmicznej!Poniższy wpis jest wpisem gościnnym autorstwa **Nikolai Wuttke**.... więcej
W moich poprzednich wpisach w serii C++ STL poruszyłem tematy związane z tym, jak używać std::optional. Ten opakowujący (nazywany również słownikowym) typ jest użyteczny zawsze wtedy, kiedy potrzebujemy wyrazić coś, co może nie posiadać stanu: coś co może być "puste". Na przykład możemy zwrócić std::nullopt aby poinformować, że że mamy do czynienia z błędem... ale czy aby na pewno to jest najlepszy wybór?... więcej