malloc/free是C中的函数,用于在堆区开辟释放空间。
用法:
//malloc/free用法
int *p = (int*)malloc(sizeof(int));
if (p) {
*p = 5;
cout << *p << endl;
free(p);
}
特点:1.需要显式指定开辟空间的字节长度;
? ? ? ? ? ?2.malloc返回值为void *,需要类型转换。
new/delete是C++中的操作符/关键字,
三种用法:
//new第一种用法
//指针变量名 = new 类型标识符
int *myint = new int;
if (myint) {
*myint = 8;
cout << *myint << endl;
delete myint;
}
//new第二种用法
//指针变量名 = new 类型标识符(初始值)
int *myint = new int(19);
if (myint) {
cout << *myint << endl;
delete myint;
}
//new第三种用法
//指针变量名 = new 类型标识符[数组长度] 为数组开辟内存
int *ptr = new int[100];
if (ptr) {
int *p = ptr;
*p++ = 1;
*p++ = 2;
cout << *ptr << endl;
cout << *(ptr + 1) << endl;
delete[] ptr;//释放数组内存要用delete[]
}
特点:1.会根据类型自动推导需要开辟的内存长度;
? ? ? ? ? ?2.返回类型为具体的类型指针。
? ? ? ? ? ?3.相比于malloc/free会调用构造和析构函数;
? ? ? ? ? ?4.有专门用于开辟释放数组的版本new[],delete[]。
水平有限,边学习边总结。
|