1.概念性质:
new是C++新提出的一个概念,它是一个操作符,而malloc是C语言原本就有的一个分配空间函数。
2.使用效果
1.对于编译器内置的类型(比如int,double等等),new和malloc的作用是一样的(new可以多进行一步初始化)
对于上图的代码,p1虽然被分配了地址空间,但是置入的是一个随机值,而p2指针指向的空间则已经被初始化为10。
2.对于用户自定义的数据类型(写的类),new可以调用类的构造函数,而malloc只能分配内存,new相当于malloc+构造函数。为了阐述这个我们先自定义一个类:
当我们分别使用malloc和new来创建一个ListNode_Cpp对象的时候,就会产生不一样的效果。
其中node的val,next以及prev指针都是随机值,而node4则调用了构造函数,next以及prev指针是空指针。
对于new所具备的这些功能,我们可以从C++源码中看到一些痕迹,new和delete是通过operator new 和operator delete来实现的,这两个是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过 operator delete全局函数来释放空间,而operator new则是在调用malloc来实现的
其中我们可以看到申请内存实际是调用了malloc函数,同时加了一个异常处理措施,如果内存申请失败,则抛出异常,而对于new来说,它实际是通过下列代码的结合来实现的。
这两行的功能就等于ListNode_Cpp* p4 = new ListNode_Cpp(5);
同理,delete也是一样的,只是释放内存不需要抛出异常(很少会有释放内存错误,除非少释放了空间)。