2012-11-07 39 views
9

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_ptrstd::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ì?

+0

std :: auto_ptr bị phản btw –

+0

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. –

+0

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

Trả lời

17

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_ptrstd::unique_ptr, cả hai hữu ích hơn đáng kể.

+3

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. –

4

Vâng, std::shared_ptrboost: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_ptrboost: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:

Các vấn đề liên quan