私は通常PIMPL年代のためのブースト:: scoped_ptrをを使用しますscoped_ptrのデストラクタの要件を満たすためにimplが完全に定義されているcppファイル。それはとにかく動作しますが、私はそれが保証されているかどうか、またはちょうどうまくいくかどうかはわかりません。いくつかの「ベストプラクティス」または標準がありますか? scoped_ptrは、コピー可能でないクラスのpimplsに最適なスマートポインタですか?テンプレート内のpimpl-idiom。どのスマートポインタ? (その後、私は驚きを得ることはありませんので、私はコピーコンストラクタに対処するのを忘れた場合一つの理由のために)私はちょうどでデストラクタを置くことはできませんが、テンプレートで</p> <p>を
template <class T> class C {
public:
C(){}
~C(){}
private:
boost::scoped_ptr<T> pimpl_;
};
この種のPIMPL実装は意味を持ちません。なぜなら、Cテンプレートをインスタンス化するためには、タイプTについて知っておく必要があるからです.PPIMPLは、ユーザから同等のTを完全に隠すためです。 –
@VladLazarenkoええと、私はboost :: scoped_ptrもあらかじめ宣言されたクラスで動作すると考えました。この場合、Tが定義されているか、事前に宣言されているかによって異なります。 –
@DavidFeurle:このテンプレートが動作するためには、 'T'のサイズとそのインタフェースは、次のようにしなければなりません。例えば、あなたは 'new T()'をどこで呼び出すのですか?それはテンプレート内になければならないので "cpp"ファイルに隠すことはできませんので、PIMPLではありません –