13

怠惰な初期化パートナーの実装shared_ptrを知っている人はいますか? weak_ptrクラスの要件は次のとおりです。

  • lazy_ptrコンストラクターの実装を必要とせずに、クライアントがオブジェクトを後で (もしあれば) 構築できるようにするクラス

  • 3 つの可能な状態を持つweak_lazy_ptrクラス: まだ構築されていない ( にロックされないshared_ptr)、構築されている ( にロックされているshared_ptr)、および破棄されている ( にロックされていないshared_ptr)

少し前に、完全には機能しなかったいくつかのクラスを作成しました ( CVuの記事はこちらを参照) 。共有ポインターとウィーク ポインターを統合する代わりに使用するモデルの主な問題は次のとおりです。shared_ptrweak_ptr

  1. すべてのオブジェクトが範囲外になると、他のクライアントがバージョンlazy_ptrを保持していても、弱い参照をロックできなくなりますshared_ptr

  2. 異なるスレッドでのオブジェクトの構築は制御できません

これらの問題を調整するための他の試み、またはこの分野で進行中の作業へのポインタをいただければ幸いです。

4

1 に答える 1

2

パラメータを必要としない遅延構築を作成するには:

boost::bind( boost::factory<T*>(), param1, param2 )new T(param1, param2)構築時にパラメーターを必要とせずに同等の機能を実行する関数オブジェクトを作成します。

この遅延構築をサポートする shared_ptr を作成するには:

ファクトリを標準にバンドルするとboost::shared_ptr(たとえば、作成したクラスで)、適切なweak_ptr機能を含む、記述した結果が得られます...

クライアントによる遅延構築をトリガーするコードはすべて実行する必要があります。

your_shared_ptr.reset( your_factory() );

オブジェクトの破棄をトリガーするコードはすべて実行する必要があります。

your_shared_ptr.reset();

共有ポインターはtrue、オブジェクトの存続期間中にのみ評価されます。また、「まだ構築されていない」と「破棄された」を区別したい場合は、ファクトリの実行後に bool を設定できます。

于 2012-01-11T22:09:19.433 に答える