- malloc free 不会调用构造函数
//void *malloc(size_t size)
//类型 大小
char *p = (char *)malloc(4);
free(p)
- new delete 会调用构造函数;有
()
会初始化,前提没有自定义构造函数
// new + 类型
int *p = new int;
delete p;
- new[] delete[]
//分配数组加[]
char *p = new char[4];
delete[] p;
- new初始化
int *p1 = new int; //未被初始化
//会调用memset
int *p2 = new int(); //初始化为0
int *p3 = new int(5); //初始化为5
int *p4 = new int[3]; //未被初始化
int *p5 = new int[3](); //初始化为0
int *p3 = new int[3]{}; //初始化为0
int *p3 = new int[3]{5}; //首元素初始化为5,其余初始化为0
void *memset(void *dest,int val,size_t size)
//将四个字节中的每一个字节设置为1
met(p,1,4);
总结
- 通过
malloc
、new
申请堆空间
malloc不会初始化堆空间;int *p = new int()
、int *p = new int[3]{}
会初始化堆空间。
malloc不会调用构造函数;new会调用构造函数。 - 什么时候生成默认构造函数