C++ 11 fornisce la classe std::allocator_traits
come il modo standard per utilizzare allocatori. La funzione statica std::allocator_traits::construct()
richiede un puntatore al quale deve essere costruito l'oggetto. La funzione statica std::allocator_traits::allocate()
, tuttavia, restituisce un valore allocator::pointer
, che ha solo comportarsi come un puntatore ma non è necessariamente uno (in generale, anche se std::allocator::pointer
è necessario per essere un puntatore).allocator_traits :: costrutto (vs) allocator_traits :: allocare()
Come si può suppone di utilizzare i metodi statici di allocazione e di costruzione se, in generale, che lavoreranno con i tipi incompatibili? Possono essere utilizzati solo se il tipo pointer
è effettivamente convertibile in un normale puntatore semplice?
+1 Questa è una domanda eccezionalmente perspicace in questo momento. Ci sono pochissimi programmatori C++ che esplorano queste acque. Gli implementatori devono. Il che mi porta a porre la domanda: sei un implementatore di std :: lib? –
@HowardHinnant: Grazie! La domanda è connessa alla progettazione di una piccola classe vettoriale con un paio di campane e fischi extra rispetto a '' std :: vector'' (ad esempio, l'uso automatico dell'archiviazione statica fino a pochi elementi, il supporto per SSE e altre istruzioni vettoriali , eccetera.). Volevo solo provare a fare le cose nel modo "corretto" rispetto al supporto degli allocatori. – bluescarni