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
- 1. Perché start_routine per il ritorno pthread_create void * e prendere void *
- 2. tipo Void in std :: tuple
- 3. Sovraccarico C++ ha la precedenza su Specializzazione?
- 4. C++ 11 Template Method specializzazione per tipo di ritorno
- 5. specializzazione caratteri tipo
- 6. Specializzazione metodo parziale C++
- 7. Il nuovo ritorno (void *) in C++?
- 8. Perché l'operatore di pre-incremento fornisce il valore in C?
- 9. Cosa significa "void * (*) (void *)" in C++?
- 10. Perché gcc consente dichiarazioni extern di tipo void (non-pointer)?
- 11. C++ - Usa modello predefinito come base per la specializzazione
- 12. Perché boost :: ptr_list utilizza il sottostante * void?
- 13. l'importazione pandas read_csv fornisce il tipo misto per una colonna
- 14. specializzazione Template e classi derivate in C++
- 15. Specializzazione in template C++ per fornire funzionalità extra membro?
- 16. Cosa significa (void **) in C?
- 17. Qual è il significato di void * * volatili in C++
- 18. la specializzazione del modello con un tipo di templatized
- 19. Utilizzando Specializzazione parziale in C++ 11
- 20. Perché utilizzare la parola chiave void?
- 21. C Dereference void * pointer
- 22. Perché non è possibile utilizzare Void come tipo di ritorno per il metodo principale
- 23. Specializzazione modello per utilizzare il tipo predefinito se il membro della classe typedef non esiste
- 24. Puntatori void per strutturare i puntatori in C
- 25. Perché Void è una struttura?
- 26. Specializzazione modelli per enum
- 27. Perché System.Web.HttpUtility.UrlEncode che fornisce il nome dello spazio dei nomi non esiste in Visual C# 2008?
- 28. C++ modello di funzione specializzazione per dimensione nota dell'array typedefed
- 29. Specializzazione di modelli per più tipi
- 30. variadic modello di specializzazione in C++ 11
Se trovi utile una risposta, è considerata buona forma su questo sito accettarla. – Gnawme