>>361-363
お返事ありがとうございます。

>>361
それぞれのスレッドで
if (p->unique())
{
 //特別な処理
}
p = shared_ptr<hoge>();

こんな感じにするわけですが、スレッドだと排他処理を別途書かない限り、両方でuniqueがFALSE返すことがありえますので無理かと。

>>362
適しているのかはわかりません。
現状では自前の参照カウントでやっています。
やろうとしていることがshared_ptrでも可能だったら、そちらのほうがベターだとと思ったしだいです。

>>363
weak_ptrを使ったとしても
スレッドA weak_ptr作成
スレッドB weak_ptr作成
スレッドA shared_ptr解放
スレッドB shared_ptr解放
スレッドA weak_ptr::expired()
スレッドB weak_ptr::expired()
と動作した場合、双方で「俺が消した」ことになってしまいます。
shared_ptrでの解放処理と、参照カウントの取得は、スレッド不可分でなければ成り立たないかと思います。