在boost::shared_ptr
析构函数中,这是完成的:
if(--*pn == 0)
{
boost::checked_delete(px);
delete pn;
}
wherepn
是指向引用计数器的指针,其类型定义为
shared_ptr::count_type -> detail::atomic_count -> long
考虑到线程使用和上面析构函数中的非原子 0-check-and-deletion,我本来希望是long
。为什么不挥发?volatile long
shared_ptr
编辑:
事实证明,我查看了未指定多线程使用时使用的标头(atomic_count.hpp)。在 atomic_count_win32.hpp 中,为多线程使用正确实现了减量。