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++?
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++?
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!
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. –
Ouais, je me suis rendu compte après l'avoir relu. –
double de beaucoup, http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free pour un. – corsiKa
Ya, fermez cette question. J'ai fait un mauvais travail à la recherche d'une question en double – Elpezmuerto
Parce que 'malloc' alloue juste de la mémoire. C++ a l'habitude d'utiliser des objets, pas de mémoire brute. – GManNickG