Mały wstęp do tematu testów jednostkowych. Trudno docenić to jak przydatne są testy jednostkowe zaczynając pisać projekt od podstaw. O wiele łatwiej jest docenić ich wage modyfikując kod, którego autor dawno zapomniał o jego istnieniu..
Pamiętam, że w pewnym momencie nauki programowania usłyszałem magiczne pytanie- gdzie znajdują się zmiennę automatyczne. Odpowiedź była prosta. Podobnie, gdy padło pytanie dotyczące zmiennych lokowanych dynamicznie. Następnie zwykle padało pytanie o to gdzie lokowane są zmienne globalne i wtedy miałem problem.
Jedną z największych pułapek w jakie można wpaść po poznaniu wskaźników inteligentnych, jest stwierdzenie, że od tej pory nie używamy już wskaźników surowych. Świetnie wytłumaczył to Herb Sutter lecz myślę, że temat ten wciąż nie pojawia się wystarczająco często. Z tego powod postanowiłem zawrzeć w tym artykule pigułkę tego co powiedział już Herb.
Po omówieniu unique_ptr przyszła pora na omówienie shared_ptr i weak_ptr. O ile poprzedni wskaźnik posiadał zasoby na własność i jako jedyny miał prawo do ich modyfikacji, o tyle dzisiejsi dwaj bohaterowie dzielą się prawem własności i pracują razem nad jednym obiektem. Jeżeli zastanawiasz się w jaki sposób jest to zrealizowane, to wpis powinien dać Ci solidne podstawy by to zrozumieć.
W poprzednim wpisie powiedzieliśmy sobie kilka słów o wskaźnikach surowych (raw pointers), czyli zwykłych wskaźnikach znanych nam z języka C.
Wskazaliśmy niektóre z ich słabych stron pozostawiając pytania, na które nie udzielają nam one odpowiedzi. Dzisiaj robiąc krok dalej w temacie wskaźników inteligetnych, chciałbym poruszyć temat pierwszego z nich- unique_ptr, pozostawiając wam do oceny, w jaki sposób odpowiada on na postawione wcześniej pytania.
Dzisiajszym wpisem chcialbym otworzyć na blogu temat wskaźników inteligentnych: std::unique_ptr, std::shared_ptr, std::weak_ptr, które znajdziemy w bibliotece <memory> o ile posiadamy kompilator zgodny ze standardem C++11 lub nowszym.
Aby dobrze wejść w temat smart pointerów, najpierw chciałbym napisać o wskaźnikach surowych (raw pointers).