- Auto_ptr sẽ không được chấp nhận trong tiêu chuẩn C ++ sắp tới?
- Có nên sử dụng unique_ptr để chuyển quyền sở hữu thay vì shared_ptr không?
- Nếu unique_ptr không có trong tiêu chuẩn, thì tôi có cần sử dụng shared_ptr thay thế không?
Câu trả lời:
CẬP NHẬT: Câu trả lời này được viết vào năm 2010 và như dự đoán std::auto_ptrđã không được dùng nữa. Lời khuyên là hoàn toàn hợp lệ.
Trong C ++, 0x std::auto_ptrsẽ không được dùng nữa std::unique_ptr. Việc lựa chọn con trỏ thông minh sẽ tùy thuộc vào trường hợp sử dụng và yêu cầu của bạn, với std::unique_ptrngữ nghĩa di chuyển cho quyền sở hữu duy nhất có thể được sử dụng bên trong các vùng chứa (sử dụng ngữ nghĩa di chuyển) và std::shared_ptrkhi quyền sở hữu được chia sẻ.
Bạn nên cố gắng sử dụng con trỏ thông minh phù hợp nhất với tình huống, việc chọn đúng loại con trỏ sẽ cung cấp cho các lập trình viên khác cái nhìn sâu sắc về thiết kế của bạn.
Có, kể từ hôm nay auto_ptrsẽ không được dùng trong C ++ 0x và bạn nên sử dụng unique_ptrthay thế. Từ tiêu chuẩn dự thảo mới nhất (n3035), phần D.9
Mẫu lớp
auto_ptrkhông được dùng nữa. [Lưu ý: Mẫu lớpunique_ptr(20.9.10) cung cấp giải pháp tốt hơn. —Gửi ghi chú]
Cho đến khi tiêu chuẩn được phê chuẩn, luôn có khả năng ủy ban sẽ sửa đổi quyết định này mặc dù tôi cảm thấy điều đó khó xảy ra với quyết định này.
Không chỉ auto_ptrkhông được chấp nhận trong C ++ 11 (D.10, trang 1228) , nó cũng sẽ bị xóa trong phiên bản tương lai của C ++ :
Thông qua N4190, và thực sự loại bỏ (không chỉ bị phản đối) một vài điều cổ xưa từ Thư viện C ++ chuẩn, bao gồm
auto_ptr,bind1st/bind2nd,ptr_fun/mem_fun/mem_fun_ref,random_shufflevà một vài chi tiết. Tất cả chúng hiện đã bị xóa khỏi thư viện chuẩn C ++ 17 nháp và sẽ không phải là một phần của C ++ di động trong tương lai.
Một tài liệu khác về nó: Ngôn ngữ lập trình C ++, Nhóm công tác phát triển thư viện - Tài liệu N4190 , nếu bạn muốn biết thêm thông tin.
Bạn có thể chuyển đổi bất kỳ mã nào bằng auto_ptrautomaticaly, bằng cách sử dụng unique_ptr:
Bất kỳ mã nào đang sử dụng
auto_ptrđều có thể được chuyển đổi cơ học sang sử dụngunique_ptr, với việcmove()chèn vào bất cứ khi nàoauto_ptrđược "sao chép".
Không, nó không bị phản đối. Có thể là như vậy, nếu C ++ 0x được chấp nhận. Và nó thực tế sẽ luôn được hỗ trợ. Tôi không tin rằng bất kỳ tính năng không dùng nữa đã từng bị loại bỏ khỏi triển khai C ++ trong thế giới thực.
auto_ptrlà một phần của tiêu chuẩn, nhưng được sử dụng ít hơn đáng kể. Từ quan điểm thực tế, việc loại bỏ nó sẽ ít tác động hơn.
<iostream.h>hơn bao giờ hếtauto_ptr, nhưng MS VC ++ (cho một) không cung cấp nó nữa.