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去开辟释放堆空间
 
 
 
 
 
 
posted @ 2018-11-20 10:46  峰中追风  阅读(1879)  评论(0编辑  收藏  举报

___________________________________________________________________________________________没有白跑的路