malloc/free和new/delete的区别
共同点
都是从堆上申请空间,并且需要用户手动释放。
不同点
1、malloc/free是函数,new/delete是操作符。
2、malloc需要用户区手动计算空间的大小,new直接再后面跟上空间的类型就好。
3、malloc返回的是void*指针,需要用户根据需要转换,new返回的是类型指针。
4、malloc/free只是开辟所需的空间,不会调用类类型中的构造函数和析构函数,new会会调用构造函数对对象进行初始化,delete再释放空间的时候会调用析构函数对空间中的资源惊醒清理。
5、malloc申请空间失败返回的是NULL,new申请失败会抛出一个bad alloc类型的异常。
6、malloc不会对申请的空间进行初始化,new可以对申请的空间进行初始化。
7、new/delete比malloc/free的效率低一点,因为他底层封装的是malloc/free。