Das PIMPL-Idiom unter C++
Neulich begegnete mir doch das sog. PIMPL-Idiom in C++. Dabei wird im Wesentlichen die Implementierung einer Klasse nach außen hin versteckt. Das PIMPL-Idiom gibt es übrigens auch unter ADA.
In C++ sieht es so aus:
class FooImpl;
class Bar {
private:
FooImpl* foo;
public:
Bar() : foo( new FooImpl() ) {}
virtual ~Bar() { delete foo; }
};Die Implementierung der Klasse FooImpl wird hier versteckt, sie ist in einer anderen
Datei (ohne Header-datei) implementiert. Dadurch kann ein Client der Klasse Bar
keinen Zugriff auf den Inhalt der Klasse FooImpl nehmen und auch nicht “herumtricksen”,
weil der Programmierer ja “weiß” wie die Klasse FooImpl “tickt”.
Siehe auch:
- Separating Interface and Implementation in C++
- C++: Vor- und Nachteile des d-Zeiger-Idioms, Teil 1 - Pimp my Pimpl
- C++ Programming/Idioms auf WikiBooks
- “Exceptional C++” von H.Sutter
- “Advanced C++ Programming Styles and Idioms” von J. Coplien