2010-03-15 41 views

Trả lời

7

Nếu bạn đang sử dụng tăng, boost::ptr_vector có thể phù hợp hơn với nhu cầu của bạn.

Nếu không, bạn có thể sử dụng shared_ptr khi bạn đề xuất hoặc xóa thủ công các phần tử của véc-tơ khi bạn đã hoàn tất.

Từ quan điểm bảo trì, shared_ptr sẽ là giải pháp ưu tiên. Tuy nhiên, lưu ý rằng shared_ptr có thể mang lại một số hình phạt về hiệu suất, điều này có thể có hoặc không đáng kể đối với đơn đăng ký của bạn.

2

Đó là một chút quá mức cần thiết, nhưng không có con trỏ thông minh nào tốt hơn cho điều đó. Bạn cũng có thể xem xét các container con trỏ của boost.

Trong C++ 0x bạn có thể lưu trữ std::unique_ptr trong các vùng chứa, gần với nhu cầu của bạn hơn.

+0

Tôi đang sử dụng boost :: shared_ptr – amitlicht

+0

+1 cho vùng chứa unique_ptr! – AshleysBrain

1

Bạn cũng có thể sử dụng Boost.PointerContainer. Sử dụng shared_ptr thể hiện quyền sở hữu được chia sẻ. Bây giờ nếu bạn chắc chắn, rằng các đối tượng của bạn bị ràng buộc vào tuổi thọ của vùng chứa, thì PointerContainer là tùy chọn thiết kế khôn ngoan hơn (đó là ngay cả một từ?).

4

Nếu mức sử dụng hiệu suất/bộ nhớ ở mức thấp không phải là yêu cầu quan trọng (ví dụ 97% của tất cả các trường hợp) thì chỉ cần dùng chung với shared_ptr. Nó đơn giản và dễ hiểu.

Nếu bạn thực sự muốn giữ mọi thứ chặt chẽ và/hoặc thể hiện ý định sở hữu chính xác hơn thì boost::ptr_vector có thể tốt hơn - nhưng nếu lớp học của bạn không quản lý bất kỳ bộ nhớ nào khác thì chỉ cần xóa thủ công tội lỗi như chúng tôi đôi khi đã dẫn đến tin ;-) Tôi là một người đề xuất RAII lớn, nhưng vẫn làm điều này theo thời gian.

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