私は現在、ブースト共有ポインタと弱いポインタ、さらにロキスマート ポインタとストロング ポインタなどの最も人気のあるスマート Ptr 実装を検討しています。これは、自分自身を実装したいからであり、理解していることから、ロキ ストロング ポインタは安全ではないように見えますが、むしろ私は理解が間違っているので、安全かどうか議論したいと思います。安全ではないと私が考える理由は、私が知る限り、弱いポインター (つまり、false が弱いことを示す StrongPtr) を十分に注意して処理しないためです。
たとえば、逆参照関数:
PointerType operator -> ()
{
KP::OnDereference( GetPointer() ); //this only asserts by default as far as i know
//could be invalidated right here
return GetPointer();
}
マルチスレッド環境では、弱いポインターはいつでも無効化される可能性があるため、この関数は無効化された Ptr を返す可能性があります。
私の理解では、逆参照しているptrのstrongPtrインスタンスを作成して、途中で無効にならないようにする必要があります。それが、最初に shared_ptr インスタンスを作成せずにboostでweak_ptrを逆参照できない理由でもあると思います。Lokis StrongPtr Constructor は、私が思うのと同じ問題に苦しんでいます。
これは問題ですか、それとも src の読み方が間違っていますか?