Tôi đang đọc http://gcc.gnu.org/onlineocs/libstdc++/manual/shared_ptr.html và tôi vẫn chưa rõ một số vấn đề về an toàn chuỗi:
- Tiêu chuẩn đảm bảo rằng việc đếm tham chiếu được xử lý an toàn cho chuỗi và nó độc lập với nền tảng, phải không?
- Vấn đề tương tự - tiêu chuẩn đảm bảo rằng chỉ một luồng (giữ tham chiếu cuối cùng) sẽ gọi xóa trên đối tượng được chia sẻ, phải không?
- shared_ptr không đảm bảo an toàn luồng nào cho đối tượng được lưu trữ trong đó?
BIÊN TẬP:
Mã giả:
// Thread I
shared_ptr<A> a (new A (1));
// Thread II
shared_ptr<A> b (a);
// Thread III
shared_ptr<A> c (a);
// Thread IV
shared_ptr<A> d (a);
d.reset (new A (10));
Gọi reset () trong luồng IV sẽ xóa cá thể trước đó của lớp A được tạo trong luồng đầu tiên và thay thế nó bằng cá thể mới? Hơn nữa sau khi gọi reset () trong luồng IV các luồng khác sẽ chỉ thấy đối tượng mới được tạo?
make_shared
thay vìnew