Wpis z mikrobloga

Dzień dobry wszystkim łączącym się w #cpp! ( ͡º ͜ʖ͡º)

Mamy dla Was nowiuteńki wpis. Jeden z trzech. Od Mariusza Jaskółki.
Mariusz opowiada dziś o jednym z najważniejszych mechanizmów Nowoczesnego C++: RAII.

https://cpp-polska.pl/post/zarzadzanie-zasobami-w-c-1-raii-i-wyjatki ()

Nie trzeba dużo szukać, aby znaleźć oferty dla „Programisty C/C++”. Mam jednak subiektywne odczucie, że sformułowanie „C/C++” jest zbyt daleko idącym uproszczeniem. Czasami możemy usłyszeć też, że C++ to „C z klasami” (...). Jednym z największych obszarów, w których różni się język C++ od C jest obszar zarządzania zasobami, czyli temat tego cyklu artykułów.


Miłego czytania! ʕʔ

Pobierz CppPolska - Dzień dobry wszystkim łączącym się w #cpp! ( ͡º ͜ʖ͡º)

Mamy dla Was now...
źródło: comment_nuYgLslh1UyXg5HauDQ9Q8YqW0VIxJKa.jpg
  • 13
@CppPolska: fajnie, tyle, ze o ile lubie C++, lubie tez C i musze powiedziec, ze podchodzac do C w sposob staroswiecki (nawet jak na lata 80), aczkolwiek fakt, podejscie takie ciagle popularne wsrod wyznawcow Linusa, to przyklad napisany przez nich pewnie wygladalby tak jak pokazane jest powyzej, natomiast mozna to zrobic bardziej elegancko z dbaniem o to by zasoby rowniez byly zwolnione. Fakt, ze dochodzimy do tego samego miejsca, a wiec
@CukrowyWykop: Problem w tym, że ludziom wydaje się, że RAII kończy się na automatycznym odpaleniu destruktora, co jest oczywiście błędnym przekonaniem. Serio, obiektywnie - widziałeś dobry artykuł o RAII w języku polskim? Być może, ale ja do takiego niego nie dotarłem.
@CukrowyWykop: Jak masz pomysł na jakieś fajne wpisy, to zapraszamy do naszego grona autorów ( ͡º ͜ʖ͡º) Jak widać po aktualnej liczbie autorów, jesteśmy otwarci na wszelaką współpracę ()
@Kaczus2B: akurat kernel jest pisany w C z rozszerzeniami GCC przez co niektóre konstrukcje wyglądają dość ciekawie:

- https://elixir.bootlin.com/linux/latest/source/kernel/audit.c#L1031 range w switch/case
- https://elixir.bootlin.com/linux/latest/source/include/linux/string.h#L142 detekcja typu zmiennej podczas kompilacji (IIRC w patchach -rt, w ten sposób wybierany była implementacja up()/down() dla typu semafora)
- https://elixir.bootlin.com/linux/latest/source/include/linux/compiler.h#L45

GCC/Clang dostarczają również rozszerzenie do definiowania funkcji która zostanie wywołana gdy dana zmienna wyjdzie ze scope, https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html __attribute__((cleanup)). Sporo kodu używa tego już od dłuższego
@babool: owszem, gcc i clang posiadają rozszerzenia, które symulują destruktor. Tyle że niektórzy wolą trzymać się standardu. Nigdy nie wiadomo na jaką platformę będziesz chciał przeportować swój kod.
@babool: chodzilo mi o uzycie obiektowosci, ktorego z niewiadomych przyczyn Linus za bardzo nie lubi (zreszta po tym kodzie tez to widac brzydkie goto, returny w srodku funkcji), a konstrukcje takowe do systemow operacyjnych trafily w latach 80, jak np BOOPSI
@esdf: zwróć uwagę, że to część pierwsza. Każdy temat warto wyłożyć od podstaw.
Poza tym, nie wiem czy czytałaś, ale ten artykuł nie jest o smart pointerach.