Возможные Дубликаты:
What is the difference between new/delete and malloc/free?
In what cases do I use malloc vs new?Почему я должен избегать использования malloc в C++?
Почему я должен избегать использования malloc
в C++?
Возможные Дубликаты:
What is the difference between new/delete and malloc/free?
In what cases do I use malloc vs new?Почему я должен избегать использования malloc в C++?
Почему я должен избегать использования malloc
в C++?
Потому что malloc
не вызывает конструктор вновь выделенных объектов.
Рассмотрим:
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!
Замечание относительно использования malloc неверно - вы выделили 42 байта, не обязательно достаточно места для хранения 42 экземпляров этого типа. Вам нужно сделать '42 * sizeof (Foo)', чтобы правильно распределить пространство. Но вы правы, что конструкторы не будут вызваны. –
Да, я понял, что после повторного чтения. –
дубликат многих http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free для одного. – corsiKa
Ya, как раз близко этот вопрос вне. Я сделал плохую работу, ища дублирующий вопрос. – Elpezmuerto
Потому что 'malloc' просто выделяет память. C++ обычно намеревается использовать объекты, а не необработанную память. – GManNickG