【原创】new和delete

为普通的变量申请内存空间,可以使用下面的语法规则。

new int; //开辟一个存放整型变量的空间,返回一个指向整形数组的指针 
new int(100);  //开辟一个存放整形变量的空间,并指定其初值为100
float* p=new float(3.1415926); //开辟一个存放实数的空间,并指定该实数的初值为3.1415926, 
                                      //将返回的指向实型数据的指针赋给指针变量p

当new操作符被执行后如果有足够的内存空间,则new按分配一块内存,并返回指向该该内存起始地址的指针;

如果内存空间不够,则返回NULL

同样可以使用new来为一个数组分配内存空间,并相应的使用delete来将其释放.

Point* pt=new Point[100];                                                                                                

在堆上创建了一个含有100个对象的数组,并把返回的指针赋给指针变量pt。这样就在堆上为100个Point对象分配了足够的内存并为没一个对象调用了构造函数。

delete pt;  //释放数组中的第一个对象,并调用第一个对象的析构函数

delete [] pt;  //释放数组中所有对象,并为数组的所有对象调用析构函数

new和delete实际调用了malloc和free函数。但new运算符除了分配内存外,还

要调用构造函数。同理,delete会调用类的析构函数。malloc函数却只是负责分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数

posted @ 2009-11-16 17:25  leukotrichia  阅读(198)  评论(0编辑  收藏  举报