-
malloc 只开辟空间 new 不仅开辟空间,系统还会调用构造函数
free 只收回空间 delete 先调用析构函数 再收回空间
-
new / delete 是关键字或运算符,可以重载
malloc / free 是函数
-
new返回值类型是安全的,不需要强转;大小由系统计算
malloc返回值类型不安全,需要强转;大小需要使用者计算
void* malloc(size_t size);//malloc函数原型 void free(void* ptr);//free函数原型
-
new开辟失败,抛出异常
malloc开辟失败,返回NULL
-
new的几种不同用法
//关键字或运算符,开辟空间初始化 Object *p = new Object(10); delete p;//释放p指向的空间,p仍然指向那里 //只开辟空间,不调用构造函数,开辟失败抛出异常 Object *s = (Object*)::operator new(sizeof(Object)); operator delete(s); //重定位,不开辟空间,只调用构造函数 //通过重定位可以在 堆,栈.data区开辟空间,而malloc只能在堆开辟空间 Object ss; Object *q = new(&ss) Object(100);//q指向s
-
new还可以初始化,malloc只能开辟空间
int *p = new int(5); //对数组只能进行0初始化 int *p = new int[6]();
-
new可以开辟常量空间,malloc不行
const int *ptr = new const int(10);
-
开辟连续内存空间,数组
int *p=new int[5](2);//C++11标准,对数组每个元素进行初始化 delete[] p;
new与malloc,delete与free区别
最新推荐文章于 2023-06-01 12:53:54 发布