Trước sự ngạc nhiên của tôi, tôi gặp lỗi khi cố gắng sử dụng std::vector::get_allocator()
với một trình cấp phát không thể sao chép được. Tại sao std::vector::get_allocator()
trả lại theo giá trị chứ không phải bằng tham chiếu?Tại sao std :: vector :: get_allocator() trả về theo giá trị?
template<typename T>
class nc_allocator {
public:
using value_type = T;
nc_allocator(nc_allocator const&) = delete;
nc_allocator& operator=(nc_allocator const&) = delete;
// Other required members.
};
std::vector<int, nc_allocator<int>> v;
// boom: use of deleted function
// 'nc_allocator<T>::nc_allocator(const nc_allocator<T>&) [with T = int]'
v.get_allocator();
Tôi nghi ngờ rằng các phiên bản của trình phân bổ có nghĩa vụ phải được xử lý như xử lý. Bằng chứng của điều này là hai người phân bổ chỉ được coi là bình đẳng nếu người ta có thể xóa các đối tượng khác. –