NEW和数组
NEW
int *p=new int [10]
p指向了第一个int地址
方括号内的必须是整形,但不必是常量
还可以用一个数组类型的类型别名来分配一个数组
<wiz_code_mirror>
typedef int arr[10]; //arr表示10个int的数组类型
int *p = new arr; //分配一个10个int型的数组 p指向第一个int
编译器执行:int *p=new int [10];
初始化动态分配对象的数组
int *p=new int [10](); //10个值初始化为0的int
int *p=new int [10]{1,2,3,4,5} //前5个已初始化,后5个默认为0
动态分配一个空数组是合法的
char *p = new char [0] //这样是合法的,但是CP不能解引用
释放动态数组
delete p;
delete [ ] p;
第二条语句销毁p所指向的数组中的元素,并释放对应的内存,数组中元素的销毁时按逆序销毁
即,最后一个元素首先被销毁,然后是倒数第二个,以此类推
普通类型释放的时候加与不加[ ]是一样的,但是在类对象中是必须加[ ]
如果动态分配可10个类对象 在delete时候 不加[ ] 这里就只会调用一次析构函数,会泄露掉9个对象
加了[ ] 就会调用10次析构函数
malloc free和new delete差别
1.malloc和free是函数,new和delete是关键字(运算符)
2.malloc是按字节申请数据,而new是按照数据类型申请数据
3.malloc申请数据,不会调用构造函数,free也不会调用析构函数
new在申请对象的时候,会自动调用构造函数,delete释放对象时候,会自动调用析构函数
总结: 所以,在C++中,申请对象空间时候,应该使用new和delete去开辟释放堆空间