New和malloc的区别?
C中动态开辟内存: malloc函数开辟 free函数释放
Void* malloc(size_t size)
Void free(void* ptr)
C++中动态开辟内存:New关键释放字开辟 Delete
New 关键字
Int *p=new int;
Delete 关键字
Delete p;
1、New是关键字 malloc是函数
2、开辟的空间位置 malloc在堆上 new不一定在堆上(堆是操作系统所维护的一块特殊的内存,它提供了动态分配内存的,使用mslloc() free()来申请/释放内存。而自由存储是C++中通过new和delete动态分配和释放对象的概念。基本上,所有的C++编译器默认使用堆来实现自由存储。也就是说,默认的全局运算符new和delete也许会使用malloc和free的方式申请和释放存储空间,也就是说自由存储区就位于堆上。但程序员可以通过重载操作符,改用其他内存来实现自由存储)堆是操作系统维护的一块内存,是一个物理概念。而自由存储是c++中通过new和delete动态分配和释放对象的存储区,是一个逻辑概念。
Int a=10;
Char*pc=new(&a)char(‘a’);//重定义new
New开辟的内存叫自由存储区域
3、new不仅分配内存,还可以做初始化。Malloc只是单纯的分配内存。
4、new(实现有两步),可以重载,malloc不能重载
通过operatoer new 这个该函数开辟内存
调用构造
5、new是c++关键字 malloc是C的函数
Malloc不能调用new
向前兼容 new 可以调用malloc
6、new可以开辟常量内存块,malloc不能开辟常量
Int *p=new const int(20);
New [] 单个内存释放delete 不会有内存泄漏产生:
Int *p=new int[10];
Delete p;
int* ptest =new Test[10]; 以数组的方式开辟对象内存
Delete ptest 释放时只释放了一个对象,会产生错误。