2015-05-09 16 views
5

Tôi đang sử dụng boost::scoped_ptr trong mã mà tôi muốn thay thế bằng std::unique_ptr. Tôi muốn biết nếu có bất kỳ khó khăn nào trong việc chuyển sang std::unique_ptr. Boost là di động trên nền tảng và trình biên dịch. Nhưng tôi không chắc chắn nếu C++ 11 được hỗ trợ bởi tất cả các trình biên dịch như MSVC. Tôi biết GCC và Clang hỗ trợ C++ 11 khá tốt.Thay đổi tăng :: scoped_ptr thành std :: unique_ptr

Tôi đã đọc câu hỏi SO “intrusive_ptr in C++11” có câu trả lời ngắn gọn là “Không”. Vì vậy, nếu bất kỳ ai có kinh nghiệm sử dụng cả hai, vui lòng chia sẻ nhận xét và suy nghĩ của bạn

+0

'std :: unique_ptr' được chỉ định theo tiêu chuẩn nên mọi triển khai tuân thủ đều hỗ trợ tốt hơn. Nhưng tôi không chắc bạn đang hỏi chính xác điều gì. Câu hỏi bạn đã liên kết đặc biệt muốn ngữ nghĩa của Boost. Câu hỏi của bạn có vẻ khác nhưng tôi không chắc nó là gì. – 5gon12eder

+0

vs2010 và chuyển tiếp có triển khai 'std :: unique_ptr' – Mgetz

Trả lời

9

Mgetz đã cung cấp thông tin rộng rãi mà tất cả các triển khai VS gần đây cung cấp unique_ptr.

Tôi khuyên bạn nên thay thế boost::scoped_ptr<T> bằng const std::unique_ptr<T>. Lý do cho các const là mô hình này chặt chẽ nhất boost::scoped_ptr<T> mà không phải là "di chuyển." Tuy nhiên tôi tin rằng boost::scoped_ptr<T> không hỗ trợ trao đổi. Vì vậy, nếu bạn đang sử dụng nó, trình biên dịch sẽ phàn nàn ở khắp mọi nơi bạn cố gắng hoán đổi một const std::unique_ptr<T> và sau đó bạn có thể đánh dấu những trường hợp đó là không const.

+0

Cảm ơn Howard. Câu trả lời này là hữu ích – rkm

+1

Có bất kỳ vấn đề về hiệu suất hoặc hiệu suất tốt hơn khi sử dụng std :: unique_ptr – rkm

+2

Tôi không tin rằng bạn sẽ thấy bất kỳ sự khác biệt về hiệu suất nào. –

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