pimplを思いつく瞬間

今まで、クラスの内部実装を隠す方法として、インターフェイスのみヘッダに書いて、実装でそのインターフェイスを継承した実装クラスを定義するやりかたでやってました。が、これだとインターフェイスの関数を全部virtualにしなきゃいけないので、関数ポインタテーブルの分だけメモリが食われます。大したことないだろうと思うかもしれませんが、仮に全てのクラスの実装をこの手法で隠すとえらいことになります。
というわけで、ふと思いついたのが、インターフェイスクラスに実装クラスのポインタをもたせる方法。インターフェイス関数(non virtual)と実装クラスへのポインタのみ書いたTestClassというクラスをヘッダで宣言します。そして、実装クラスTestClassImplを.cppに書きます。これで実装は隠蔽でき、仮想関数も使わなくてすみます。
で、実装クラスへのポインタの変数を作ったんですが、名前がpImpl。…これって俗に言うpimplイディオム?と思って検索してみたら、見事にそうだったようです。
で、最初に検索でひっかかったサイト(http://c2.com/cgi/wiki?PimplIdiom)を見てたら、実装クラスがインターフェイスクラスを継承する方法もpimplっぽいような記述が(スマートポインタの一例っぽく書いてるようにも取れる…)。てか、ヘッダに書くべきではないprivateメンバの例がBigScaryMonster型のhusseinなのはどうかと。けど、他にもかなり色々と重宝しそうな情報があるので、もうしばらく読んでみます。
http://c2.com/cgi/wiki?CategoryCpp
もしかしてこのサイトって結構メジャーだったりするのかもしれませんが、それはそれで。宝の山の予感。