C++malloc/free与new/delete的区别
- 申请的内存所在位置不一样:new在自由存储区,malloc在堆;
- 返回类型的安全性:new返回对象指针,malloc返回void *;
- 是否调用类的构造函数、析构函数:new调用,malloc不调用
- 失败时的返回值:new失败时抛出异常bad_alloc,malloc返回null;
- 是否须要指定大小:malloc须要指定大小;
- 对数组的操做:new会对数组中的每个元素调用其构造函数,malloc并不知道所申请区域要存放的内容;
- 是否能够互相调用:new能够调用malloc,malloc不能调用new;
- 是否能够重载:new能够重载;
- 可否直观的从新分配内存:new不能够,malloc能够利用realloc实现;
- 客户可否对分配失败进行处理:new能够经过set_new_handler指定new_handle(一个没有参数没有返回值的函数指针)来处理。
欢迎关注本站公众号,获取更多信息