C++26 vereinfacht das PImpl-Idiom mit std::indirect
The PImpl idiom and the C++26 std:indirect type
Das PImpl-Idiom (Pointer to Implementation) trennt Schnittstelle und Implementierung, um Compile-Zeit-Abhängigkeiten zu reduzieren. Bisher erforderte es manuelle Ressourcenverwaltung oder std::unique_ptr, was Probleme wie fehlende Konstanz-Propagation und null-Zustände nach Moves mit sich brachte. Der Artikel zeigt die klassische Implementierung mit rohen Pointern und Rule of Five, die Variante mit std::unique_ptr und schließlich die neue C++26-Lösung mit std::indirect. Diese bietet Deep Copy, Konstanz-Propagation und ist nie null (außer nach Move, was mit valueless_after_move() geprüft werden kann). Ein Vergleich verdeutlicht, wie std::indirect den Code robuster macht. Aktuell unterstützt nur GCC 16 std::indirect.
std::indirect ist ein neuer Vokabular-Typ aus C++26, der für Klassenmember gedacht ist, die dynamisch allokiert werden, sich aber wie Werte verhalten sollen.