⚡ AutoSnippets PRO EN

C++: Produkcyjne Snippet'y Kodu

Wzorce C++: zarządzanie pamięcią, wielowątkowość, struktury danych bez alokacji.

Python JavaScript TypeScript Java C# C++ Go PHP Rust SQL

Na tej stronie:

26. C++: Inteligentne Wskaźniki

C++

Bezpieczne użycie std::unique_ptr oraz std::shared_ptr.

#include <memory>

class Node {
public:
    int value;
    std::shared_ptr<Node> next;
    Node(int val) : value(val) {}
};

void createList() {
    auto head = std::make_shared<Node>(10);
    head->next = std::make_shared<Node>(20);
}

Kiedy używać

Stosuj zamiast surowych wskaźników (raw pointers) wszędzie, gdzie zarządzasz pamięcią dynamiczną — eliminuje większość wycieków pamięci.

Typowe pułapki

Cykliczne referencje między obiektami shared_ptr (np. rodzic-dziecko) powodują wyciek pamięci — w takich przypadkach potrzebny jest weak_ptr.

27. C++: Wielowątkowa Pula Wątków

C++

Kolejka zadań bazująca na std::mutex i condition_variable.

#include <vector>
#include <thread>
#include <queue>
#include <mutex>

class SimplePool {
    std::vector<std::thread> workers;
    std::queue<std::function<void()>> tasks;
    std::mutex queue_lock;
};

Kiedy używać

Przydatne przy przetwarzaniu wielu niezależnych zadań równolegle bez tworzenia nowego wątku dla każdego z osobna.

Typowe pułapki

Sam szkielet klasy nie wystarczy — potrzebna jest jeszcze logika synchronizacji (condition_variable) do budzenia wątków czekających na zadania.

28. C++: Wydajny Tokenizator CSV

C++

Szybkie przetwarzanie dużych plików tekstowych bez alokacji.

#include <sstream>
#include <string>
#include <vector>

std::vector<std::string> split(const std::string&s, char delimiter) {
    std::vector<std::string> tokens;
    std::string token;
    std::stringstream tokenStream(s);
    while (std::getline(tokenStream, token, delimiter)) {
        tokens.push_back(token);
    }
    return tokens;
}

Kiedy używać

Przydatne przy szybkim parsowaniu prostych plików tekstowych bez dołączania zewnętrznej biblioteki CSV.

Typowe pułapki

To rozwiązanie nie obsługuje poprawnie pól z przecinkami w cudzysłowach (typowe dla CSV) — do pełnej zgodności ze standardem potrzebny jest bardziej rozbudowany parser.

29. C++: Lock-free Ring Buffer

C++

Bufor cykliczny do komunikacji międzywątkowej o niskim narzucie.

#include <atomic>
#include <vector>

template<typename T, size_t Size>
class RingBuffer {
    T data[Size];
    std::atomic<size_t> head{0};
    std::atomic<size_t> tail{0};
};

Kiedy używać

Stosuj przy komunikacji między wątkami o wysokich wymaganiach wydajnościowych, np. w systemach czasu rzeczywistego lub audio.

Typowe pułapki

Programowanie bez blokad (lock-free) jest wyjątkowo podatne na subtelne błędy współbieżności — testuj dokładnie na wielordzeniowym sprzęcie, nie tylko lokalnie.

30. C++: System Logowania z Makrami

C++

Warunkowa kompilacja logów zależna od flag debugowania.

#include <iostream>

#ifdef DEBUG_MODE
    #define LOG(msg) std::cout << "[DEBUG] " << msg << std::endl;
#else
    #define LOG(msg)
#endif

Kiedy używać

Przydatne do logów debugowych, które chcesz całkowicie usunąć z buildu produkcyjnego bez wpływu na wydajność.

Typowe pułapki

Makra nie są świadome zakresu (namespace) i mogą kolidować z innymi symbolami o tej samej nazwie — w większych projektach lepiej sprawdza się prawdziwa biblioteka logująca.