Qual è la differenza tra "nuovo" e "malloc" e "calloc" e altri in famiglia?Qual è la differenza tra "new" e "malloc" e "calloc" in C++?
(Quando) Ho bisogno di qualcosa di diverso da "nuovo"?
Uno di questi è implementato utilizzando un altro?
Qual è la differenza tra "nuovo" e "malloc" e "calloc" e altri in famiglia?Qual è la differenza tra "new" e "malloc" e "calloc" in C++?
(Quando) Ho bisogno di qualcosa di diverso da "nuovo"?
Uno di questi è implementato utilizzando un altro?
new
e delete
sono caratteristiche specifiche di C++. Non esistevano in C. malloc
è il modo in cui la vecchia scuola C fa le cose. La maggior parte delle volte non è necessario utilizzarlo in C++.
malloc
alloca memoria non inizializzata. La memoria allocata deve essere rilasciata con free
.calloc
è come malloc
ma inizializza la memoria allocata con una costante (0). Deve essere liberato con free
.new
inizializza la memoria allocata chiamando il costruttore (se si tratta di un oggetto). La memoria allocata con new
dovrebbe essere rilasciata con delete
(che a sua volta chiama il distruttore). Non è necessario che tu specifichi manualmente la dimensione necessaria e la lanci al tipo appropriato. Quindi, è più moderno e meno incline agli errori.Lo "scratch space" è un termine che hai appena inventato? –
@Neil Butterworth: non lo so. Ma penso di averlo letto da qualche parte ... Glossario: scratch space: n. memoria non inizializzata :) –
mantenendo la terminologia specifica di C++, un array è anche un oggetto, e verranno chiamati i vettori di tutti i suoi sotto-oggetti. –
L'utilizzo di nuovi significa che i costruttori saranno richiamati nella memoria appena allocata. Se la cosa assegnata non ha costruttori, la nuova è funzionalmente identica a malloc. e dovrebbe normalmente essere usato in pereference ad esso.
nuovo può o non può essere implementato in termini di malloc - lo standard C++ non richiede entrambi gli approcci.
come altri messaggi hanno sottolineato: mal loc/libero è parte di C++ per essere compatibile con C.
Vedi anche: Stroustrup: new vs malloc
la principale differenza tra nuovo e malloc posso ricordare è che non si può riallocare memoria allocata da nuova utilizzando realloc. Quindi, se si voleva per aumentare/diminuire la dimensione del blocco di memoria, si doveva allocare un nuovo blocco e copiare tutto sopra.
calloc consente di inizializzare il blocco di memoria si alloca mentre malloc non lo fa.
In effetti, questo è lo stesso per 'malloc'.La funzione 'realloc' lo fa la maggior parte del tempo. –
Quando si nuovo un oggetto, lo spazio per l'oggetto non viene solo assegnato ma viene chiamato il costruttore dell'oggetto. Ma questo è il modo in cui C++ suo fatto, malloc è il vecchio modo versione C di allocazione di memoria.calloc è lo stesso di malloc, tranne che cancella la memoria a tutti i bit zero.
new/delete + new []/delete []:
malloc/libero + famiglia:
Vedi anche il mio related answer here
Riconosco quel formato :-) –
@Martin York: Vedo ora dalla domanda duplicata collegata. Mi piacciono di più le tue liste :) Penso che sia il formato delle scommesse per questi tipi di domande in cui confronti e confronti 2 cose. Almeno ottengo sempre voti alti per quel tipo di risposte formattate. –
Non hai bisogno di altro che di nuovo. È un sostituto completo per malloc in C++.
Per quanto riguarda la differenza: Malloc assegna solo memoria. Nuova memoria allocata e chiama i costruttori. Allo stesso modo, libera solo la memoria. Elimina rilascia la memoria e chiama il distruttore.
Una parola di avvertimento: Non mescolare i due idiomi. I risultati non sono definiti.
Fare clic su questo collegamento http://www.ritambhara.in/difference-between-malloc-calloc-free-and-realloc-functions/ – Jaichander
Se si utilizza lo STL, raramente è necessario utilizzare l'allocazione di memoria esplicita. – Brian
duplicati di http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free –
Controllare il duplicato collegato questione, come la sua risposta è più completa: http: //stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free –