Eh, penso che new
e malloc
sono diversi e allocator
fornisce diverse funzioni. malloc
restituisce i dati non inizializzati e calloc
restituisce zero dati -ed. Ma new
chiamerebbe il costruttore se si sta creando un'istanza di qualche classe (non, bool
questi tipi primitivi, che, a proposito, possono essere inizializzati pure). delete
chiamerebbe il distruttore, mentre free
no.
Come per allocator
, fornisce un livello di astrazione per l'utente. allocator
può restituire oggetti costruiti, spazio di memoria non inizializzato o distruggere un oggetto o rilasciare lo spazio. I contenitori STL utilizzano allocator
per ottenere spazio di memoria e creare oggetti.
ma nota che come consuetudine allocator
è possibile, un allocator
non riesce necessariamente memoria come new
/delete
. Può creare un grosso blocco di memoria, quindi fare un po 'di cache di allocazione . Può restituire l'indirizzo di memoria nelle aree mappate ai file su disco in modo che i dati interni vadano nel file system mentre viene modificato dal livello superiore, contenitore. Inoltre può chiamare new
per ottenere memoria. In questo modo, allocator
consente all'utente di creare contenitori che si trovano in aree specifiche della memoria. Pertanto, con allocator
s, la logica interna dei contenitori viene separata dal modo in cui viene gestita la memoria di archiviazione.
In realtà è possibile scrivere una classe derivata da std::allocator
per implementare tutte le funzionalità sopra menzionate.
si potrebbe desiderare di leggere this per una discussione più dettagliata sul allocator
s.
1 ricerca google: http://wiki.answers.com/Q/What_is_the_difference_between_malloc_and_new_other_than_syntax –
Floris Velleman, non stavo cercando la differenza tra nuovo e cancella. – BJC
Hmm. Non vedo come il "duplicato" risponda a questa domanda specifica. Bene, forse in parte ("gli allocatori sono collegabili") ma non affronta la domanda specifica sulla distinzione tra allocazione e costruzione. Non sono nemmeno sicuro del motivo del downvote. –