2013-05-13 16 views
6

Bây giờ tôi đang viết lại một phần mã của tôi để sử dụng tiêu chuẩn C++ 11. Ở một số nơi tôi tìm thấy đoạn mã sau:Bạn có sử dụng std :: shared_ptr <std::vector> thay vì tăng :: shared_array không?

boost::shared_array<uint8_t> array; 

Liệu nó thực hiện để thay thế nó với:

std::shared_ptr<std::vector<uint8_t>> array; 

Tôi đang cố gắng để thay thế chức năng tất cả của tăng mà đã được trình bày trong C++ 11 trong tôi mã.

Tôi cần phải làm rõ một chút. Trên thực tế tôi cần một mảng thô (nhưng với refcount, do đó, nó có thể được tự động xóa), không cần cho tất cả những tính năng vector. Vì vậy, tăng :: shared_array giải quyết vấn đề tôi muốn mà không cần bất kỳ chi phí bổ sung. Nhưng tôi đang cố gắng để làm cho mã của tôi sử dụng tiêu chuẩn mới càng nhiều càng tốt (mặc dù nhiều thư viện từ tăng vẫn không được bảo hiểm theo tiêu chuẩn mới).

Cảm ơn.

+0

Vâng, bạn có thể loại bỏ sự phụ thuộc tăng trong trường hợp đó. Đối với phần còn lại, nó có chức năng tương đương ở mức cao. –

Trả lời

4

Với tình trạng hiện tại của các vấn đề trong C++ 11 hỗ trợ trong các trình biên dịch và sự lười biếng của người maintaing xây dựng, tôi sẽ rời khỏi mà bây giờ như nó vốn có. Boost có tài sản làm việc hầu như ở mọi nơi, bao gồm các trình biên dịch cũ và thay đổi bạn muốn thực hiện sẽ khó cải thiện mã.

Mã này cũng không phải là giống hệt nhau.

+0

Cảm ơn. Có phải _that_ khó thêm shared_array và/hoặc scoped_array vào tiêu chuẩn không? Chỉ cần tự hỏi. – maverik

+4

@maverik: C++ 11 có 'shared_ptr 'và' unique_ptr ' chuyên ngành, mà tôi đoán fullfill chính xác mục đích đó. – rubenvb

+0

@rubenvb, quan sát thú vị. – maverik