在C++中,用new/delete操作符取代malloc/free
申请一个对象:
int* p=new int;
释放
delete p;
注意:
(1)new的返回值直接就是对象指针,不用再转换
(2)new的时候可以设初始值 如:new int(12)
申请多个对象:
例如,申请1024个int对象:
int* p = new int [1024];
释放
delete [ ] p;
注意:
(1)用[]指定对象个数
(2)如果new的时候用了[],则释放的时候使用delete[]操作符
使用原则:
(1)用new申请的内存,必须用delete释放
(2)用new[ ]申请的内存,必须用delete[ ]释放
(3)用完之时,及时释放,delete之后指针所指向的内存不在可用,最好释放后置为空指针NULL
动态创建对象
对于class类型,必须用new/delete来创建、销毁。
new:动态创建一个对象:
(1)申请一块内存
(2)内部调用了构造函数
例:
Circle * c = new Circle(); 默认构造函数
Circle * c = new Circle; 不加括号也可以
Circle * c = new Circle(1,1,4); 传构造参数
delete:释放这个对象:
(1)调用了析构函数
(2)释放内存
例:
delete c;
new:动态创建多个对象
Circle * c = new Circle[4];
delete [ ] c;
注:含有“默认构造函数”的类,才可能使用new[] 一次性创建多个对象。
new和malloc巨大区别:
malloc 返回的是一片内存,不是对象(malloc不负责构造);
new 返回的是一个可以正常工作的对象(因为它调用了构造函数);
所以,new、delete绝不仅仅是申请内存这么简单,它是申请了内存,并且构造了对象。
申请一个对象:
int* p=new int;
释放
delete p;
注意:
(1)new的返回值直接就是对象指针,不用再转换
(2)new的时候可以设初始值 如:new int(12)
申请多个对象:
例如,申请1024个int对象:
int* p = new int [1024];
释放
delete [ ] p;
注意:
(1)用[]指定对象个数
(2)如果new的时候用了[],则释放的时候使用delete[]操作符
使用原则:
(1)用new申请的内存,必须用delete释放
(2)用new[ ]申请的内存,必须用delete[ ]释放
(3)用完之时,及时释放,delete之后指针所指向的内存不在可用,最好释放后置为空指针NULL
动态创建对象
对于class类型,必须用new/delete来创建、销毁。
new:动态创建一个对象:
(1)申请一块内存
(2)内部调用了构造函数
例:
Circle * c = new Circle(); 默认构造函数
Circle * c = new Circle; 不加括号也可以
Circle * c = new Circle(1,1,4); 传构造参数
delete:释放这个对象:
(1)调用了析构函数
(2)释放内存
例:
delete c;
new:动态创建多个对象
Circle * c = new Circle[4];
delete [ ] c;
注:含有“默认构造函数”的类,才可能使用new[] 一次性创建多个对象。
new和malloc巨大区别:
malloc 返回的是一片内存,不是对象(malloc不负责构造);
new 返回的是一个可以正常工作的对象(因为它调用了构造函数);
所以,new、delete绝不仅仅是申请内存这么简单,它是申请了内存,并且构造了对象。