Artykuły z kategorii Programowanie

GCC: Optymalizacja rekurencji ogonowej

Rekurencję nazywamy ogonową kiedy wywołanie rekurencyjne jest ostatnią rzeczą, którą zajmuje się funkcja. Z tego właśnie powodu da się ją bardzo łatwo optymalizować. Również najpopularniejszy kompilator języka C++, czyli g++ dostarcza nam w opcjach optymalizacyjnych przekształcanie rekurencji ogonowej na mniej zasobożerną postać.

Zwalczanie wycieków i błędów pamięci (C++11)

Nowoczesne narzędzia dostarczone w bibliotece standardowej języka C++11 ułatwiają i czynią bardziej efektywną walkę z wyciekami i błędami pamięci. Z pozoru niegroźne problemy mogą całkowicie położyć naszą aplikację. Nauczmy się jak je rozpoznawać i unikać.

C++11: Funkcje usunięte (= delete)

Dzisiaj postanowiłem napisać krótko o usuwaniu z klas funkcji, które są domyślnie definiowane (i deklarowane) przez kompilator. Powodem tego jest fakt iż w czasie prac nad biblioteką Tamandua, brak usunięcia domyślnie definiowanego konstruktora kopiującego spowodował bardzo trudny do znalezienia błąd. Ponieważ jego zlokalizowanie kosztowało mnie około godziny intensywnej pracy z GNU debuggerem, postanowiłem, że od dzisiaj będę o takie niuanse dbał zaraz po stworzeniu nowej klasy.

C++11: Referencje do r-wartości i semantyka przenoszenia danych

Standard C++11 wprowadził dla nas dwa nowe udogodnienia, które mogą uczynić nasz kod jeszcze szybszym. Są to referencje do r-wartości (r-value references) i semantyka przenoszenia danych (move semantics). Te dwa rozwiązania, dobrze wykorzystane, umożliwiają tworzenie szybszego i bardziej efektywnego kodu. W tym artykule zamierzam omówić zarówno referencje do r-wartości jaki semantykę przenoszenia. Są one ściśle powiązane.

C++11: Wskaźniki unikalne i współdzielone (unique_ptr, shared_ptr)

Nowe standardy języka C++ dodają nie tylko całkiem nowe możliwości, ale także udostępniają nam udogodnienia, dzięki którym możemy wyeliminować na zawsze niektóre problemy, które były poważnym utrapieniem dla programistów. Jednym z takich problemów są wycieki pamięci przy jej dynamicznym alokowaniu. Wielu z nas często zapomina o zwalnianiu (przy użyciu operatorów delete i delete[]) pamięci zarezerwowanej przy pomocy new oraz new[] . Nowe udogodnienia w postaci wskaźnikówunikalnych iwspółdzielonych powodują, że z operatora delete będziemy korzystać coraz rzadziej. Czym właściwie są nowe rodzaje wskaźników?