6

循環性を避けるためshared_ptrに、 s と s で構成されるオブジェクト構造があります。シリアル化時にオブジェクト追跡を介して逆シリアル化するときに、共有ポインターと弱いポインターを復元する必要があるため、生のポインターは使用できません。オブジェクトのライフタイム パターンは複雑ですが (パーティクル シミュレーション)、完全に予測可能です。を使用するときはいつでも、ポインタがまだ有効であると確信しています。通常、私は非常に短い時間だけオブジェクトを必要とするので使用します。weak_ptrboost::serializationweak_ptr::lock()lock().get()

現在は、lock().get()共有カウントをインクリメントし ( でlock())、その後すぐにデクリメントするため、パフォーマンスに影響があります (一時的なshared_ptrものは破棄されます)。

2002 年のこのboost.devel の投稿weak_ptrによると、開発中に、生のポインタに直接アクセスする機能が ( unsafe_getorと名付けられてleak) 検討されましたが、実際の実装には至りませんでした。これがないと、プログラマは特定の条件下で次善のインターフェイスを使用することになります。

ここで、問題はunsafe_get/をエミュレートする方法ですleak。つまり、プログラマーのリスクで無効な から生のポインターを取得し、weak_ptrデータの読み取りのみ (書き込みではなく) を行う方法です。内部の生のポインターのオフセットを見つけるなどのトリックがshared_ptr仕事をするだろうと想像できます。

私は を使用してboost::shared_ptrいますが、このソリューションは c++11 でも機能する可能性がstd::shared_ptrあります。

4

2 に答える 2