C++
Kurz: Eine kompilierte, objektorientierte Erweiterung von C mit manueller Speicherverwaltung und sehr hoher Ausführungsgeschwindigkeit.
Genauer: Gibt dem Programmierer direkte Kontrolle über Speicher (Pointer, manuelles Allokieren/Freigeben), was Performance-Vorteile bringt, aber auch Fehlerquellen wie Memory-Leaks oder Buffer-Overflows öffnet. Wird typischerweise dort eingesetzt, wo Geschwindigkeit kritisch ist: Betriebssysteme, Spiele-Engines, eingebettete Systeme.
Im Detail
Objektorientierung über C hinaus
Im Gegensatz zu C bringt C++ (entwickelt ab 1979 von Bjarne Stroustrup, ursprünglich als “C mit Klassen”) objektorientierte Konzepte mit (Klassen, Vererbung, Polymorphismus), lässt dem Entwickler aber die Wahl, wie nah an der Hardware man bleiben will — man kann sowohl im C-Stil mit rohen Pointern programmieren als auch moderne, sicherere Konstrukte wie Smart Pointers nutzen, die Speicher automatisch freigeben, sobald er nicht mehr gebraucht wird:
// Klassischer C-Stil: manuelle Speicherverwaltung
int* zahl = new int(42);
delete zahl; // vergisst man das, entsteht ein Memory-Leak
// Moderner C++-Stil: Smart Pointer
std::unique_ptr<int> zahl2 = std::make_unique<int>(42);
// wird automatisch freigegeben, sobald "zahl2" außer Scope geht
class Fahrzeug {
public:
virtual void beschleunigen() = 0; // rein virtuelle Funktion
};Manuelle Speicherverwaltung als zweischneidiges Schwert
Manuelle Speicherverwaltung bedeutet: der Entwickler entscheidet explizit, wann Speicher reserviert (new) und wieder freigegeben (delete) wird — im Gegensatz zu Sprachen mit automatischer Garbage Collection wie Java oder C#. Das ermöglicht maximale Kontrolle und Vorhersagbarkeit (kein unvorhersehbarer GC-Pause mitten in einer zeitkritischen Operation), öffnet aber auch klassische Fehlerquellen: vergisst man delete, entsteht ein Memory-Leak (Speicher wird nie freigegeben); greift man nach delete versehentlich noch auf den Speicher zu (“Use-after-free”), führt das zu undefiniertem Verhalten und potenziellen Sicherheitslücken. Moderne C++-Standards (C++11 und neuer) mindern dieses Risiko durch Smart Pointers, die die Freigabe automatisch übernehmen, ohne die manuelle Kontrolle komplett aufzugeben.
Einsatzgebiete
Diese Mischung aus maximaler Kontrolle und optionalen Sicherheitsmechanismen macht C++ zur bevorzugten Sprache für Bereiche, in denen Performance nicht verhandelbar ist:
- Spiele-Engines: Unreal Engine und die meisten AAA-Titel, wo jede Millisekunde Renderzeit zählt.
- Browser-Engines: Chromes V8 (JavaScript-Engine) und Blink (Rendering-Engine) sind größtenteils C++.
- Betriebssysteme und Treiber: viele Betriebssystem-Komponenten und Hardware-Treiber.
- Finanzsysteme: Hochfrequenzhandel, wo Latenz im Mikrosekundenbereich über Gewinn/Verlust entscheidet.
- Eingebettete Systeme: wo Ressourcen (Speicher, Rechenleistung) stark begrenzt sind.
Der Preis für diese Kontrolle ist eine der steilsten Lernkurven unter den verbreiteten Sprachen — Konzepte wie Pointer-Arithmetik, Referenzen, Move-Semantik und Template-Metaprogrammierung gelten selbst unter erfahrenen Entwicklern als anspruchsvoll.
RAII als zentrales Idiom
Ein zentrales C++-Idiom ist RAII (“Resource Acquisition Is Initialization”): Ressourcen (Speicher, Dateihandles, Netzwerkverbindungen) werden an die Lebensdauer eines Objekts gekoppelt — im Konstruktor reserviert, im Destruktor automatisch freigegeben, sobald das Objekt seinen Gültigkeitsbereich verlässt. Das verhindert systematisch vergessene Freigaben, selbst wenn mittendrin eine Exception geworfen wird, und ist die konzeptionelle Grundlage von Smart Pointers.