The pImpl approach was developed by Herb Sutter at Microsoft to minimize the coupling between the interface and the implementation to avoid interface changes that might affect program recompilation, etc. Simply put, if your large program is afraid of the huge compile time costs associated with a small change to a header file because of its complex header inclusion, you need to use pImpl to remedy the situation.