2010-07-01 2 views
0

Возможные Дубликаты:
What is the difference between new/delete and malloc/free?
In what cases do I use malloc vs new?Почему я должен избегать использования malloc в C++?

Почему я должен избегать использования malloc в C++?

+0

дубликат многих http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free для одного. – corsiKa

+0

Ya, как раз близко этот вопрос вне. Я сделал плохую работу, ища дублирующий вопрос. – Elpezmuerto

+1

Потому что 'malloc' просто выделяет память. C++ обычно намеревается использовать объекты, а не необработанную память. – GManNickG

ответ

4

Потому что 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! 
+1

Замечание относительно использования malloc неверно - вы выделили 42 байта, не обязательно достаточно места для хранения 42 экземпляров этого типа. Вам нужно сделать '42 * sizeof (Foo)', чтобы правильно распределить пространство. Но вы правы, что конструкторы не будут вызваны. –

+0

Да, я понял, что после повторного чтения. –

Смежные вопросы