Trong boost::shared_ptr
destructor, điều này được thực hiện:Tại sao bộ đếm tham chiếu không tăng :: shared_ptr volatile?
if(--*pn == 0)
{
boost::checked_delete(px);
delete pn;
}
nơi pn
là một con trỏ đến quầy tham khảo, được typedefed như
shared_ptr::count_type -> detail::atomic_count -> long
tôi dự kiến sẽ có các long
là volatile long
, được đưa ra sử dụng luồng và 0-kiểm tra và xóa không nguyên tử trong trình phá hủy shared_ptr
ở trên. Tại sao nó không dễ bay hơi?
EDIT:
Hóa ra tôi nhìn vào tiêu đề sử dụng khi sử dụng đa luồng không được xác định (atomic_count.hpp). Trong atomic_count_win32.hpp, phần giảm được triển khai đúng cho việc sử dụng đa luồng.
Bạn tìm mã này ở đâu? – jalf
@jalf: shared_ptr_nmt.hpp –