1 malloc与new的区别?
malloc、free是函数,标准库stdlib.h,但是new、delete是一种运算符,在使用上两者可以混着使用。但是两者有一个区别:
比如下面这个,Test是自定义的一个类,它的构造函数要求传入两个值a和b,但是malloc无法传入。除非手动调用init()或set()之类的成员函数对a,b赋值。
Test *tp=(Test*)malloc(sizeof(Test));
tp->printT();
new可以在创建内存时可以传入a和b,如下:
Test *tp=new Test(10,20);
总结:new在堆上初始化一个对象的时候,会触发对象的构造函数。而malloc不能。另外,free不能触发对象的析构函数,delete就可以。如下图:
如果是free,就只会将中间的堆,释放;
如果是delete,那么会在delete之前触发对象的析构函数,将右边的堆释放,然后再释放中间的堆。
因此,上面可以看出free会造成内存泄漏。