运算符new使用起来要比函数malloc()简单得多,例如:
Int *p1=(int *)malloc(sizeof(int)* length);
Int *p2=new int[length];
这是因为new内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new的语句也可以有多种形式。例如:
Class Obj{
Public:
Obj(); //默认构造函数
Obj(int X); //带一个参数的构造函数
……
}
Void Test(void)
{
Obj*a=new Obj;
Obj*b=new Obj(j); //初值为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;漏掉了另外99个对象。
1. 不论是何种类型,new/delete和new[]/delete[]总是应该正确配对使用。因此,没有任何一种数据类型。对于其动态创建的数组来说delete p和delete[]p是等价的。
2. 多次delete一个不等于NULL的指针会导致运行时错误,但是多次delete一个NULL指针没有任何危险,因为delete运算符会首先检查这种情况,如果指针为NULL,则直接返回。
信息来源:http://www.lirenedu.org/index.php?ack=xinwen&id=1180