Aufgaben-Python/courses/cpp/10_smart_pointer_und_speichersicherheit
2026-09-10 07:43:39 +02:00
..
aufgabe.cpp IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
index.html IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
musterloesung.cpp IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
README.md IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00
test_aufgabe.cpp IHK AP1 & AP2 (FISI) Crashkurse: Vollständige Lernfeld-Module (LF 1-12), 150 IHK-Prüfungsfragen, interaktive Prüfungs-Engine und Multi-Sprachen-Erweiterung (PDFs excluded) 2026-09-10 07:43:39 +02:00

C++ 10: Smart Pointer & Modern Memory Safety

Modernes C++20 löst das historische Problem von C/C++ – manuelle Speicherverwaltung, Memory Leaks und Ungültige Zeiger (Dangling Pointers) – vollständig durch Smart Pointer und das RAII-Prinzip (Resource Acquisition Is Initialization).


🎯 Lernziele

  1. Exklusiver Besitz: std::unique_ptr<T> mit std::make_unique<T> erzeugen und per std::move transferieren.
  2. Geteilter Besitz: std::shared_ptr<T> und atomare Referenzzählung verstehen.
  3. Zyklenfreie Strukturen: std::weak_ptr<T> zur Verhinderung von Speicherlecks in Graphen, Caches und Observern einsetzen (.lock(), .expired()).
  4. RAII Custom Deleters: Nicht-speicherbasierte Handles (C-File-Pointers, Mutexes) sicher über RAII-Deleter verwalten.
  5. Memory Safety Verification: Überwachung von Konstruktion und Destruktion in Unit Tests.

💡 Schlüsselkonzepte

1. std::unique_ptr

  • Kann nicht kopiert werden (copy constructor = delete).
  • Überträgt Besitz via std::move.
  • Zerstört das Objekt automatisch beim Verlassen des Scopes.
auto session = std::make_unique<Session>(42, "admin");
manager.register_session(std::move(session)); // session ist danach nullptr

2. std::shared_ptr & std::weak_ptr

  • std::shared_ptr teilt den Besitz mit mehreren Instanzen.
  • std::weak_ptr beobachtet ein Objekt, ohne den Referenzzähler zu erhöhen.
std::shared_ptr<Document> doc = std::make_shared<Document>("MasterThesis");
std::weak_ptr<Document> observer = doc;

if (auto active_doc = observer.lock()) {
    std::cout << active_doc->get_title() << std::endl;
}

3. RAII Custom Deleter

auto raw_buffer = std::unique_ptr<uint8_t[], void(*)(uint8_t*)>(
    new uint8_t[1024],
    [](uint8_t* ptr) { delete[] ptr; }
);

🚀 Aufgaben in aufgabe.cpp

  • TODO 1: create_unique_session(id, user) mit std::make_unique
  • TODO 2: SessionManager mit Move-Semantik (std::move)
  • TODO 3: SharedDocument & DocumentObserver mit std::weak_ptr
  • TODO 4: ResourceTracker mit RAII-Zähler
  • TODO 5: Custom Deleter für SafeBuffer