Zu meiner Überraschung habe ich einen Fehler erhalten, wenn ich std::vector::get_allocator()
mit einem nicht kopierbaren Zuordner verwenden wollte. Warum gibt std::vector::get_allocator()
by-value und nicht by-reference zurück?Warum gibt std :: vector :: get_allocator() by-value zurück?
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();
Ich vermute, dass Instanzen von Allokatoren wie Griffe behandelt werden sollen. Der Beweis dafür ist, dass zwei Zuordner nur als gleich angesehen werden, wenn man die Objekte des anderen löschen kann. –