Possible Duplicates:
What is the difference between new/delete and malloc/free? In what cases do I use malloc vs new?
Why should I avoid using malloc
in c++?
Because malloc
does not call the constructor of newly allocated objects.
Consider:
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!
精彩评论