Đây là một câu hỏi nhỏ gồm hai phần, tất cả về tính nguyên tử của std::shared_ptr
:
1.
Theo như tôi có thể nói, std::shared_ptr
là con trỏ thông minh duy nhất trong <memory>
đó là nguyên tử. Tôi đang tự hỏi liệu có phiên bản phi nguyên tử std::shared_ptr
nào có sẵn không (tôi không thể nhìn thấy bất kỳ thứ gì trong đó <memory>
, vì vậy tôi cũng sẵn sàng đón nhận các đề xuất bên ngoài tiêu chuẩn, như trong Boost). Tôi biết boost::shared_ptr
cũng là nguyên tử (nếu BOOST_SP_DISABLE_THREADS
không được xác định), nhưng có thể có một thay thế khác? Tôi đang tìm thứ gì đó có cùng ngữ nghĩa std::shared_ptr
nhưng không có tính nguyên tử.
2. Tôi hiểu tại sao std::shared_ptr
là nguyên tử; thật tuyệt. Tuy nhiên, nó không phải là tốt cho mọi tình huống và C ++ đã có câu thần chú "chỉ trả tiền cho những gì bạn sử dụng". Nếu tôi không sử dụng nhiều luồng hoặc nếu tôi đang sử dụng nhiều luồng nhưng không chia sẻ quyền sở hữu con trỏ trên các luồng, thì con trỏ thông minh nguyên tử là quá mức cần thiết. Câu hỏi thứ hai của tôi là tại sao một phiên bản phi nguyên tử không std::shared_ptr
được cung cấp trong C ++ 11 ? (giả sử có lý do tại sao ) (nếu câu trả lời chỉ đơn giản là "một phiên bản phi nguyên tử đơn giản là chưa bao giờ được xem xét" hoặc "không ai từng yêu cầu một phiên bản phi nguyên tử" thì tốt!).
Với câu hỏi số 2, tôi tự hỏi liệu ai đó đã bao giờ đề xuất một phiên bản phi nguyên tử của shared_ptr
(cho Boost hoặc ủy ban tiêu chuẩn) (không phải để thay thế phiên bản nguyên tử shared_ptr
, nhưng để cùng tồn tại với nó) và nó đã bị bắn hạ vì Lý do cụ thể.