これはちょっとした質問ですが、boost::shared_ptr はスレッドセーフではないのに、アトミックな参照カウントをわざわざ使う必要があるのでしょうか? デストラクタはスレッド間で安全に使用できないため、要点がわかりません。
たとえば、shared_ptr のコピーをスレッドに渡すと、少なくともスレッドが最後に終了するときは常に破棄されます。
これはちょっとした質問ですが、boost::shared_ptr はスレッドセーフではないのに、アトミックな参照カウントをわざわざ使う必要があるのでしょうか? デストラクタはスレッド間で安全に使用できないため、要点がわかりません。
たとえば、shared_ptr のコピーをスレッドに渡すと、少なくともスレッドが最後に終了するときは常に破棄されます。
共有ポインターのスレッドセーフの制限を誤解していると思います。2 つの異なるスレッドで同じ共有ポインターを操作したくないという意味で、共有ポインター自体はスレッド セーフではありません。ただし、同じオブジェクトを 2 つの異なるスレッドで同時に操作することはほとんど安全ではなく、ほとんどのオブジェクトでスレッドセーフではありません。
2 つの異なるスレッドで 2 つの異なる共有ポインターを操作することは、それらが同じオブジェクトへのポインターであっても、完全にスレッドセーフです。
たとえば、スレッドはオブジェクトとそれへの共有ポインタを作成できます。次に、同じオブジェクトへの別の共有ポインターを作成できます。次に、1 つのスレッドが最初の共有ポインターを操作し、別のスレッドが 2 番目の共有ポインターを操作できます。2 つの共有ポインター (および作成された追加のコピー) の最後がなくなると、オブジェクトは破棄されます。