2013-09-25 49 views
5

vectơ này có trong mọi loại phương thức khởi tạoTại sao phân bổ const trong vector?

const allocator_type& alloc = allocator_type() 

Tại sao nó lại const? Tôi không thể thấy nó hữu ích như thế nào. Tôi có thể nhìn thấy đi qua trong một cấp phát vì vậy nhiều vectơ có thể chia sẻ cùng một nhóm nhưng được nhóm lại khỏi một nhóm vectơ khác. Tuy nhiên với const wouldnt có nghĩa là họ sẽ chỉ sao chép dữ liệu cá thể? sao chép một hồ bơi hoặc bất cứ điều gì nó không có vẻ là hữu ích.

Tại sao nó const?

+3

Bạn luôn có thể có một người cấp phát chỉ lưu trữ một tham chiếu đến một nhóm (shared_ptr?) Để sao chép là tốt. –

+1

Một người cấp phát! = Một hồ bơi. Do đó, việc sao chép một trình cấp phát không có nghĩa là sao chép một hồ bơi một cách hợp lý. Đối số của bạn không hợp lệ :) – sehe

+0

@sehe: Đúng là bạn! Điều đó làm tôi cười – user2814152

Trả lời

4

Thực ra, chuyển cấp số như là const tham chiếu và sao chép nó bên trong vùng chứa sẽ đơn giản hóa mọi thứ. Nếu không, nếu chỉ có một tham chiếu được truyền vào, bạn sẽ phải đảm bảo rằng bộ cấp phát không bị hủy trước vùng chứa. Bạn chỉ cần chia sẻ trạng thái cấp phát giữa các bản sao của nó. Bạn có thể làm điều đó chỉ đơn giản bằng cách giữ hồ bơi trong một shared_ptr.

+1

@JurajBlaho: Wikipedia là, tôi sợ, lỗi thời. Trong khi C++ 98 (và C++ 03) được sử dụng để yêu cầu một cá thể của một cấp phát của một kiểu đã cho tương đương với bất kỳ cá thể nào khác của một trình cấp phát cùng loại, trong các trình phân bổ C++ 11 * có * giá trị ngữ nghĩa (và tiểu bang). –

4

Người phân bổ có nghĩa vụ phải có ngữ nghĩa giá trị, có nghĩa là vector lưu trữ theo giá trị (chú ý rằng get_allocator() trả về theo giá trị). Vì vậy, các nhà xây dựng có thể dễ dàng lấy phân bổ bởi tham chiếu const và chỉ cần sao chép nó.

+0

Tôi khá bối rối tại sao điều này lại bị giảm giá. – sehe

+0

@sehe Vì vậy, tôi là I. Nhưng không có cách nào để yêu cầu một bình luận, thật không may. – Angew

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