Vì vậy, tôi muốn sử dụng con trỏ thông minh thay vì nguyên và gần như mọi chủ đề trên SO nói về thư viện Boost. Nhưng std có những thứ như std::auto_ptr
và std::shared_ptr
. Tại sao lại tăng cường? Sự khác biệt là gì?Sự khác biệt giữa các con trỏ thông minh Boost và con trỏ thông minh tiêu chuẩn là gì?
Trả lời
Về cơ bản, Boost đã làm shared_ptr
trước tiên. Bạn có thể lưu ý rằng nhiều lớp container mới trong C++ 11 đã được nâng cấp từ lâu. Tôi mong đợi mô hình này sẽ tiếp tục với các phiên bản tiếp theo của tiêu chuẩn C++. Boost hỗ trợ các trình biên dịch C++ cũ hơn mà không nói đến C++ 11, đó là một lợi ích lớn.
Ngẫu nhiên, std::auto_ptr
không còn được dùng trong C++ 11, thay vào đó, hãy mang lại std::shared_ptr
và std::unique_ptr
, cả hai hữu ích hơn đáng kể.
Cụ thể hơn: Boost là một sân chơi thư viện dành cho các tác giả để khám phá không gian thiết kế và xác thực thư viện của họ với người dùng thực.Ủy ban C++ (có nhiều tác giả như vậy) sau đó đi vào và chuẩn hóa những gì đã làm việc. –
Vâng, std::shared_ptr
và boost:shared_ptr
là cả hai con trỏ đếm tham chiếu. Thay vào đó std :: auto_ptr hoạt động rất khác. Sự khác biệt giữa std::shared_ptr
và boost:shared_ptr
là rất nhỏ và chủ yếu là lịch sử. Trước C++ 11 không có std::shared_ptr
và chỉ boost:shared_ptr
. Khi C++ 11 được thiết kế, họ lấy boost:shared_ptr
làm mô hình.
Tất cả các con trỏ thông minh được đề cập của bạn có điểm chung là chúng có cơ chế riêng để đảm bảo quản lý suốt đời cho các điểm được thực hiện một cách chính xác. auto_ptr
hoạt động để nếu bạn có nhiều phiên bản auto_ptr
thì chỉ một trong số chúng chứa con trỏ đến đối tượng thực. Bất cứ khi nào bạn tạo một auto_ptr
từ một số khác auto_ptr
, thì cột mới sẽ trỏ đến đối tượng và đối tượng cũ là NULL
. Mặt khác với shared_ptr
có thể có nhiều trường hợp shared_ptr
chia sẻ cùng một đối tượng, chỉ khi trường hợp cuối cùng vượt ra ngoài phạm vi, chỉ khi đó đối tượng bị xóa ..
Trong C++ 11 có một con trỏ tương tự nhập vào std::auto_ptr
, cụ thể là std::unique_ptr
, nhưng có một số khác biệt quan trọng, xem thêm std::auto_ptr to std::unique_ptr.
Tài liệu tham khảo:
Xem thêm:
- 1. OpenCV hoặc Boost con trỏ thông minh
- 2. Con trỏ thông minh và tham khảo
- 3. C++ Hiệu suất con trỏ thông minh
- 4. Con trỏ thông minh trong Qt
- 5. Con trỏ & phá hủy thông minh
- 6. pimpl-idiom trong mẫu; con trỏ thông minh nào?
- 7. Con trỏ thông minh và xử lý ngoại lệ
- 8. thúc đẩy con trỏ thông minh và BOOST_NO_MEMBER_TEMPLATES
- 9. Sự khác biệt giữa con trỏ và biến con trỏ là gì?
- 10. Con trỏ thông minh và đếm số liệu trong Java
- 11. C++ 11 con trỏ thông minh và đa hình
- 12. khởi động đúng cách thông minh con trỏ mảng
- 13. Quy tắc ba với con trỏ thông minh?
- 14. Khi nào tôi nên sử dụng con trỏ thô trên con trỏ thông minh?
- 15. thành ngữ hàm tạo ảo với con trỏ thông minh
- 16. Sự khác biệt giữa const. con trỏ và tham chiếu?
- 17. sử dụng mem_fun() cho vùng chứa con trỏ thông minh
- 18. Tôi có thể viết một hàm C++ chấp nhận cả một con trỏ thô và một con trỏ thông minh?
- 19. Sự khác nhau giữa con trỏ float và địa chỉ con trỏ int là gì?
- 20. Cách tốt nhất để triển khai con trỏ thông minh trong C++ là gì?
- 21. Sự khác biệt giữa std :: function <> và một con trỏ hàm tiêu chuẩn?
- 22. Sự khác nhau giữa con trỏ tới con trỏ và con trỏ tới mảng?
- 23. Sự khác biệt giữa * (Con trỏ + Chỉ mục) và Con trỏ []
- 24. Sự khác biệt giữa mảng ký tự và con trỏ
- 25. trả về một 'con trỏ' được yêu cầu phải được giữ bởi một con trỏ thông minh
- 26. Con trỏ cho con trỏ là gì?
- 27. Hình phạt gói con trỏ thông minh. Bản ghi nhớ với std :: map
- 28. truyền một vector giữa các hàm thông qua con trỏ
- 29. Sự khác biệt giữa con trỏ rõ ràng và tiềm ẩn trong Oracle là gì?
- 30. Sự khác biệt giữa giải phóng con trỏ và gán nó cho NULL là gì?
std :: auto_ptr bị phản btw –
Các gợi ý thông minh mới, như 'std :: shared_ptr' vv (với ngoại lệ của' std :: auto_ptr ') trong C++ 11 được mô hình hóa sau các cấu trúc có cùng tên trong Boost. –
Kiểm tra ngày của những mục SO bạn đề cập đến. Một số con trỏ thông minh 'boost', chẳng hạn như' boost :: shared_ptr', đã được giới thiệu trong tiêu chuẩn chỉ năm ngoái (và do đó trở thành 'std :: shared_ptr'). – Gorpik