不完全な型で動作する非共有ポインタである標準的なポインタクラス(またはブースト)はありますか?私はC++ 11標準とブーストライブラリを使い、見つけられませんでしたが、非常に便利なタイプのようです。不完全な型の非共有スマートポインタ
例えば、私はスマートポインタを使って不透明な型を作りたいと思っています。
class A;
wrap_ptr<A> some_func();
void other_func(A const &);
A
は、様々な機能に使用できる不透明タイプです。上記のインターフェースのユーザーは、Aの不完全な定義のみを持ちますが、ポインターを削除/リセットできるはずです。私は上記のことがshared_ptr
でできることを知っていますが、それは私がこの特定のコードで望ましくないオーバーヘッドを持っています。 unique_ptr
は正しい所有権セマンティクスを持っていますが、不完全な型では動作しません。理論的には、ラッパーは、デリゲーターへのポインターを持つオーバーヘッドだけを必要とします。
C++ 11や追加ライブラリにこのようなタイプがありますか?
注:このタイプは簡単に作成できますが、できるだけ標準タイプを選択したいと思います。それは基本的なスマートなポインタタイプでなければならないようです。
UPDATE:unique_ptr
良い選択肢では表示されません。最初に構文のオーバーヘッドが相殺されるでしょう。第二に、私はそれがカスタムディレターで安全に使用できると確信していません。どのように動作するかを確認します。
技術的には真ですが、これを直接使用するのは構文的に不愉快です。単純に 'ptr_type(new T)'を行うことはできませんが、テンプレートtypedefが正しいと仮定した場合、 'ptr_type(new T、T ::〜T)'を実行する必要があります。 –
実際には、 'unique_ptr'を注意深く見ても、状態付きのカスタムデリターは使用できません。 'reset'関数は、コンストラクタだけが行うので、' unique_ptr'のカスタム削除の側面は部分的に壊れています。 –
カスタムディレクターは必要ありません。型は 'unique_ptr'のデストラクタが呼び出されるときに完全である必要があります。つまり、保持されたクラスが完了した後にデストラクタを定義することができます。 – Xeo