そこで、PIMPL とスタック割り当てについて考えてみました。私はライブラリを作成しており、PIMPL を使用してクラスのプライベート メンバーを非表示にすることにしました。つまり、このようにクラスを宣言することになります
class Foo {
private:
class Handle;
std::tr1::shared_ptr<Handle> handle;
public:
Foo();
};
それはかなり簡単です。しかし、コンストラクターでこれを行います
Foo::Foo() : handle(new Handle()) {}
したがって、誰かが私のライブラリを使用してスタックに Foo を作成する場合、基本的にヒープ割り当てを行っています。これは、PIMPL を使用する際に考慮しなければならないトレードオフですか? コンストラクターの横に警告を表示してドキュメントをリリースすることを考えました:「警告: これにより、ヒープ割り当てが発生します」など。
私のもう 1 つの考えは、純粋な仮想インターフェイスとして実装に公開されるすべてのクラスと、スマート ポインターを返す一連の静的ファクトリ メソッドを用意することでした。これはヒープ割り当ても意味しますが、トリックはありません。
何か考えや提案はありますか?ライブラリを使用するプログラマーに対して、私は過度に配慮していませんか?