PIMPL Pointer to Implementation
Alle privaten Member hinter einen Zeiger auf einen Typ legen, der nur im Header deklariert und in der Implementierungsdatei definiert ist. Auch Kompilierungsfirewall genannt.
Zwei Probleme verschwinden. Das erste sind Build-Zeiten: Normalerweise muss jede Datei, die eine Klasse einbindet, neu kompiliert werden, wenn sich ein privates Member ändert — obwohl sie es gar nicht berühren kann —, und der Header muss zusätzlich die Header aller Member-Typen mitziehen. Das zweite ist ABI-Stabilität, weshalb Bibliotheksautoren das Muster verwenden: Die Objektgröße ändert sich nicht, wenn sich der private Inhalt ändert, sodass ein kompiliertes Programm auch gegen eine neue Bibliotheksversion weiterläuft. Die Kosten: eine Heap-Allokation pro Objekt und ein Sprung bei jedem Zugriff. Die Falle, in die jeder mindestens einmal tappt: Der Destruktor muss im Header deklariert und in der Implementierungsdatei definiert werden, sonst wird der Deleter von unique_ptr gegen einen unvollständigen Typ instanziiert.