W boost::shared_ptr
destructor, odbywa się to:Dlaczego licznik odwołań w boost :: shared_ptr volatile?
if(--*pn == 0)
{
boost::checked_delete(px);
delete pn;
}
gdzie pn
jest wskaźnik do licznika odniesienia, który jest typedefed jak
shared_ptr::count_type -> detail::atomic_count -> long
Liczyłam na long
być volatile long
, biorąc pod uwagę wątkowe użycie i nie-atomowe 0-sprawdzanie-i-usuwanie w powyższym destruktorze shared_ptr
. Dlaczego to nie jest niestabilne?
Edycja:
Okazuje się, że spojrzał na nagłówka, używanego podczas wielowątkowy użycie nie jest określona (atomic_count.hpp). W atomic_count_win32.hpp dekrement jest poprawnie implementowany do użycia wielowątkowego.
Skąd się wziął ten kod? – jalf
@jalf: shared_ptr_nmt.hpp –