В boost::shared_ptr
деструктора, это делается:Почему контрольный счетчик в boost :: shared_ptr нестабилен?
if(--*pn == 0)
{
boost::checked_delete(px);
delete pn;
}
где pn
является указателем счетчика ссылок, который typedefed в
shared_ptr::count_type -> detail::atomic_count -> long
Я бы ожидал, что long
быть volatile long
, учитывая поточное использование и неатомное 0-check-and-deletion в деструкторе shared_ptr
выше. Почему он не изменчив?
EDIT:
Оказывается, я посмотрел на заголовок, используемый при многопоточной использование не указано (atomic_count.hpp). В atomic_count_win32.hpp декремент правильно реализован для многопоточного использования.
Где вы находите этот код кстати? – jalf
@jalf: shared_ptr_nmt.hpp –