2011-07-02 11 views
3

私はヒープ上に作成することができないクラスを持っており、それは専用のデストラクタを持っています。ポインタからのshared_ptr

しかし、このような構成オブジェクトへのポインタを返す関数があります。私はそれから共有ポインタを作りたい:

MyClass *GetMyClassPointer() {...} 

boost::shared_ptr<MyClass> ptr; 
ptr = boost::shared_ptr<MyClass>(GetMyClassPointer()); // [x] 

error: ‘MyClass::~MyClass()’ is private

任意の方法?

+0

クラスのセマンティクスについて詳しく説明してください。クラスはシングルトンを実装している可能性があります。答えが 'shared_ptr'をまったく使用すべきでないということです。クラスは、オブジェクトを同じものに戻す必要があるファクトリまたはメモリプールを実装している可能性があります工場の...答えはあなたが質問に表示されていない情報に依存します。 –

答えて

9

はい。

インスタンスがプライベートコンストラクタ(メンバーまたはフレンド)にアクセスできる関数によって動的に割り当てられているようです。それから、プライベートデストラクタへのアクセス権を持っているインスタンスを終了したら、そのインスタンスをクリーンアップするためのパブリック関数が存在するはずです。

カスタムディテクタを受け入れるshared_ptrコンストラクタを使用し、クラスが提供するクリーンアップ関数にワイヤリングします(署名を一致させるためにラッパー関数が必要な場合があります)。

+0

本当にここに行く方法はカスタムディレクターです。 – Puppy

関連する問題