2011-08-22 4 views

risposta

7

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.

1

L'allocatore deve essere specializzato per void in quanto non è possibile avere riferimenti a void.

+0

Anche se, non sarebbe questo un problema solo se qualcuno lo ha effettivamente istanziato per "vuoto"? – Owen

+1

dove è utilizzato l'allocatore ? puoi darmi un esempio? –

Problemi correlati