尽量不要在c++中使用malloc!
在c语言中,通过malloc函数申请内存空间。在c++中虽然也保留了malloc(),但是应该尽量避免使用。new关键字相比于malloc()的主要好处在于,new关键字不仅分配内存,而且还构造对象。例如下面的代码:
FOO* myFoo {(Foo*)malloc(sizeof(Foo))}; // c语言方式申请Foo类的内存空间
Foo* myFoo2 {new Foo()}; // c++方式申请Foo类的内存空间
上述代码执行后,两个指针将指向堆空间中保存Foo的位置。也可以通过两个指针访问Foo的数据成员和方法。但是不同之处在于,myFoo指向的Foo对象不是一个正常的对象,因为这个对象未被构造。因为malloc()函数只负责留出一块指定大小的内存,它并不知道或者关心对象本身,只有在分配的空间真正被使用的时候,系统才会真正的分配内存空间。
相反,调用new关键字不仅会分配正确的大小内存,还会调用相应的构造函数以构建对象。类似的差异还在free()和delete运算符上。使用free()时,不会调用对象的析构函数。使用delete关键字的时候,将会调用对象的析构函数清理对象。