new和delete运算符用于动态分配和撤销内存的运算符

来源:互联网 发布:java简单模拟借书系统 编辑:程序博客网 时间:2024/04/30 14:56
new和delete运算符用于动态分配和撤销内存的运算符new用法: 1. 开辟单变量地址空间 1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int(5) 作用同上,但是同时将整数赋值为5 2. 开辟数组空间 一维: int *a = new int[100];开辟一个大小为100的整型数组空间 二维: int **a = new int[5][6] 三维及其以上:依此类推. 一般用法: new 类型 [初值]delete用法: 1. int *a = new int; delete a; //释放单个int的空间 2.int *a = new int[5]; delete [] a; //释放int数组空间int *p1 = (int *)malloc(sizeof(int) * length);int *p2 = new int[length];运算符new比malloc要简单多了,这是因为new内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new的语句也可以有多种形式。例如class Obj{public : Obj(void); // 无参数的构造函数 Obj(int x); // 带一个参数的构造函数…}void Test(void){ Obj *a = new Obj; Obj *b = new Obj(1); // 初值为1 … delete a; delete b;}如果用new创建对象数组,那么只能使用对象的无参数构造函数。例如 Obj *objects = new Obj[100]; // 创建100个动态对象不能写成 Obj *objects = new Obj[100](1);// 创建100个动态对象的同时赋初值1在用delete释放对象数组时,留意不要丢了符号‘[]’。例如 delete []objects; // 正确的用法delete objects; // 错误的用法后者相当于delete objects[0],漏掉了另外99个对象。malloc 和free只是分配了空间. 而new和delete不仅分配了空间,还完成了对构造函数和析购函数的调用,当然这是对对象而言。 两者在对基本数据类型操作时候,没有多大区别,区别在于对对象进行操作时。malloc和free是函数,但new和delete是操作符
原创粉丝点击