
148
|
4 章 スマートポインタ
項目 22:Pimpl イディオムを用いる際は特殊メンバ関数を定義する
長大なビルド時間と格闘した経験があるならば、Pimpl イディオム(Pimpl Idiom、pointer to
implementation、実装を指すポインタ)もとっくに承知でしょう。Pimpl イディオムとはクラスの
メンバ変数を実装クラス(または struct)に置き換える技法です。 元クラス(primary class)に
あるメンバ変数を実装クラス(implementation class)に移動し、このメンバ変数にはポインタを介
し間接的にアクセスします。例えば、次のような Widget があるとします。
class Widget { // in header "widget.h"
public: ヘッダファイル「widget.h」で宣言
Widget();
…
private:
std::string name;
std::vector<double> data;
Gadget g1, g2, g3; // Gadget is some user-
}; // defined type
Gadget は何らかのユーザ定義クラス
Widget のメンバ変数の型は std::string、std::vector、Gadget であるため、Widget をコン
パイルするにはこれらの型の存在が見えていなければなりません。すなわち、Widget を使用する
コードでは <string>、<vector> ...