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
Jest wiele sytuacji, kiedy potrzebujemy wyrazić coś "opcjonalnego" - obiekt, który może posiadać wartość, lub nie. Mamy kilka możliwości implementacji tego przypadku, ale wraz ze standardem C++17 przychodzi najbardziej przydatna droga: std::optional. Dzisiaj przygotowałem jeden przypadek refactoringu, który może nauczyć nas, jak stosować tą funkcję standardu C++17.... więcej