new与malloc区别

1、new分配内存时会按照数据类型计算需要分配内存的大小,malloc分配内存时是按照指定的大小分配的;
2、new不仅分配一段内存,而且会调用构造函数,malloc不会调用构造函数;之前看到过一个题说int* p = new int与int* p = new int()的区别,因为int属于C++内置对象,不会默认初始化,必须显示调用默认构造函数,但是对于自定义对象都会默认调用构造函数初始化。翻阅资料后,在C++11中两者没有区别了,自己测试的结构也都是为0;
3、new返回的是指定对象的指针,而malloc返回的是void*,因此malloc需要将返回值进行类型转化;
4、new是一个操作符,malloc是一个库函数;
5、new分配的内存要调用用delete销毁,malloc要用free来销毁;delete销毁时会调用对象的析构函数,而free不会调用对象的析构函数;
6、malloc分配的内存不够的时候,可以用realloc扩容。new没用这样的扩容操作;
7、new如果分配失败了会抛出bad_malloc的异常,而malloc失败了会返回NULL。因此对于new,需要和try…catch语法配合使用,而malloc则应该判断指针的返回值。为了兼容很多c程序员的习惯,C++也可以采用new nothrow的方法禁止抛出异常而返回NULL;

new和new[]的区别,new[]一次分配所有内存,多次调用构造函数,分别搭配使用delete和delete[],delete[]多次调用析构函数,销毁数组中的每个对象。而malloc则只能sizeof(int) * n。

posted on 2018-03-12 23:39  lina2014  阅读(154)  评论(0编辑  收藏  举报

导航