【原创】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也不会调用析构函数

浙公网安备 33010602011771号