Con mia sorpresa, ho ricevuto un errore durante il tentativo di utilizzare std::vector::get_allocator()
con un allocatore non copiabile. Perché il valore std::vector::get_allocator()
restituisce il valore in base al valore e non in base al riferimento?Perché std :: vector :: get_allocator() restituisce per valore?
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();
ho il sospetto che i casi di allocatori dovrebbero essere trattati come maniglie. La prova di ciò è che due allocatori sono considerati uguali solo se uno può cancellare gli oggetti dell'altro. –