Utilizzare new
. Non dovresti aver bisogno di usare malloc
in un programma C++, a meno che non stia interagendo con qualche codice C o hai qualche motivo per gestire la memoria in un modo speciale.
Il tuo esempio di node = malloc(sizeof(Node))
è una cattiva idea, perché il costruttore di Node
(se ne esistono) non sarebbe stato chiamato, e una successiva delete node;
avrebbe risultati non definiti.
Se avete bisogno di un buffer di byte, piuttosto che un oggetto, avrete generalmente vuole fare qualcosa di simile:
char *buffer = new char[1024];
o, preferibilmente, qualcosa di simile:
std::vector<char> buffer(1024);
Si noti che per il secondo esempio (utilizzando std::vector<>
), non è necessario delete
l'oggetto; la sua memoria verrà automaticamente liberata quando esce dal campo di applicazione. Dovresti sforzarti di evitare entrambi i programmi new
e malloc
in programmi C++, invece di utilizzare oggetti che gestiscono automaticamente la propria memoria.
fonte
2010-04-29 21:38:55
Si noti che in C++ non esiste cast implicito da void *, quindi sul caso malloc è necessario eseguire effettivamente 'Node * node1 = reinterpret_cast (malloc (sizeof (Node)) ;, che è chiaramente troppo digitato. :) (Ok ok, puoi anche fare un cast in stile C, ma allora perché stai codificando in C++? :)) –
Cerca di non applicare troppo C a C++, sono lingue diverse con cose fatte in modi diversi. – GManNickG