Có, có (khá nhiều). std::unique_ptr<T[]>
. Mẫu tiểu học có chuyên môn hóa một phần cho các trường hợp này, trong đó cung cấp giao diện thích hợp (điều hành []
, không điều hành *
vv)
Ngoài ra, bạn có thể bọc std::vector
trong lớp học của riêng bạn và hạn chế giao diện của nó. Bạn thậm chí có thể làm điều đó bằng cách bắt nguồn từ một lớp std::vector
sử dụng thừa kế ngoài công lập và xuất bản chỉ các bộ phận có liên quan của giao diện của nó:
template <class T, class A = std::allocator<T>>
struct FixedVector : private std::vector<T, A>
{
using FixedVector::vector::vector;
using FixedVector::vector::operator=;
using FixedVector::vector::get_allocator;
using FixedVector::vector::at;
using FixedVector::vector::front;
using FixedVector::vector::back;
using FixedVector::vector::data;
using FixedVector::vector::begin;
using FixedVector::vector::cbegin
using FixedVector::vector::end;
using FixedVector::vector::cend;
using FixedVector::vector::empty;
using FixedVector::vector::size;
using FixedVector::vector::operator[];
};
Tại sao bạn cần điều này? Tại sao bạn không thể sử dụng một vector hoặc một mảng? – user463035818
Tôi thích các loại của mình càng chính xác càng tốt. Tôi có kế hoạch sử dụng một số 'vector' nhưng thiết lập kích thước của nó chỉ một lần và sau đó chỉ thay đổi giá trị của nó. Tôi thích nếu tôi có thể tài liệu này thông qua hệ thống kiểu thay vì thông qua một bình luận. – tohava
@Cyber - nhưng tôi không muốn nó chỉ cho các loại giá trị không thể sao chép được, tôi muốn nó cho tất cả các loại. – tohava