Ho notato che l'allocatore in C++ fornisce la specializzazione per il tipo void. C'è uno scopo speciale per fare questo? Non ha senso allocare memoria per il tipo di vuoto, giusto?Perché l'allocatore in C++ fornisce la specializzazione per il tipo void
risposta
Questa vecchia Standard Librarian colonna da Matt Austern ha una discussione piuttosto approfondita dei ripartitori in generale, compreso questo bocconcino:
cosa facciamo su vuoto? A volte un contenitore deve fare riferimento ai puntatori n. e il meccanismo di rebind ci dà quasi quello di cui abbiamo bisogno, ma non lo è esattamente . Non funziona, perché dovremmo scrivere qualcosa come come puntatore malloc_allocator :: e abbiamo definito malloc_allocator in modo tale che l'istanziazione per il vuoto sarebbe illegale. Utilizza sizeof (T) e si riferisce a T &; nessuno dei due è legale quando T è nullo. La soluzione è semplice come il problema: specializza malloc_allocator per void, tralasciando tutto tranne il minimo minimo necessario per fare riferimento ai puntatori void.
malloc_allocator è l'implementazione di esempio che Austern utilizza nel suo esempio, ma vale anche per il caso generale.
L'allocatore deve essere specializzato per void
in quanto non è possibile avere riferimenti a void
.
Anche se, non sarebbe questo un problema solo se qualcuno lo ha effettivamente istanziato per "vuoto"? – Owen
dove è utilizzato l'allocatore
Se trovi utile una risposta, è considerata buona forma su questo sito accettarla. – Gnawme