2010-07-01 4 views
0

Doublons possibles:
What is the difference between new/delete and malloc/free?
In what cases do I use malloc vs new?Pourquoi devrais-je éviter d'utiliser malloc en C++?

Pourquoi devrais-je éviter d'utiliser malloc en C++?

+0

double de beaucoup, http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free pour un. – corsiKa

+0

Ya, fermez cette question. J'ai fait un mauvais travail à la recherche d'une question en double – Elpezmuerto

+1

Parce que 'malloc' alloue juste de la mémoire. C++ a l'habitude d'utiliser des objets, pas de mémoire brute. – GManNickG

Répondre

4

Car malloc n'appelle pas le constructeur d'objets nouvellement alloués.

Tenir compte:

class Foo 
{ 
public: 
    Foo() { /* some non-trivial construction process */ } 
    void Bar() { /* does something on Foo's instance variables */ } 
}; 

// Creates an array big enough to hold 42 Foo instances, then calls the 
// constructor on each. 
Foo* foo = new Foo[42]; 
foo[0].Bar(); // This will work. 

// Creates an array big enough to hold 42 Foo instances, but does not call 
// the constructor for each instance. 
Foo* foo = (Foo*)malloc(42 * sizeof(Foo)); 
foo[0].Bar(); // This will not work! 
+1

Le commentaire concernant l'utilisation de malloc est incorrect - vous avez alloué 42 octets, pas nécessairement assez d'espace pour contenir 42 instances du type. Vous auriez besoin de faire '42 ​​* sizeof (Foo)' pour allouer assez d'espace, correctement. Mais vous avez raison de dire que les constructeurs ne seraient pas appelés. –

+0

Ouais, je me suis rendu compte après l'avoir relu. –