循環性を避けるためshared_ptr
に、 s と s で構成されるオブジェクト構造があります。シリアル化時にオブジェクト追跡を介して逆シリアル化するときに、共有ポインターと弱いポインターを復元する必要があるため、生のポインターは使用できません。オブジェクトのライフタイム パターンは複雑ですが (パーティクル シミュレーション)、完全に予測可能です。を使用するときはいつでも、ポインタがまだ有効であると確信しています。通常、私は非常に短い時間だけオブジェクトを必要とするので使用します。weak_ptr
boost::serialization
weak_ptr::lock()
lock().get()
現在は、lock().get()
共有カウントをインクリメントし ( でlock()
)、その後すぐにデクリメントするため、パフォーマンスに影響があります (一時的なshared_ptr
ものは破棄されます)。
2002 年のこのboost.devel の投稿weak_ptr
によると、開発中に、生のポインタに直接アクセスする機能が ( unsafe_get
orと名付けられてleak
) 検討されましたが、実際の実装には至りませんでした。これがないと、プログラマは特定の条件下で次善のインターフェイスを使用することになります。
ここで、問題はunsafe_get
/をエミュレートする方法ですleak
。つまり、プログラマーのリスクで無効な から生のポインターを取得し、weak_ptr
データの読み取りのみ (書き込みではなく) を行う方法です。内部の生のポインターのオフセットを見つけるなどのトリックがshared_ptr
仕事をするだろうと想像できます。
私は を使用してboost::shared_ptr
いますが、このソリューションは c++11 でも機能する可能性がstd::shared_ptr
あります。