今天重点说的是delete的一个小区别~~~
c++中对new申请的内存释放方式有delete和delect[]两种方式,那么这两种方式具体该怎么理解呢?
我们都知道,在c++中用new分配内存,用delect释放内存;使用new[]分配内存,就用delete[]释放内存。具体来讲就是delect释放new分配的单个对象指针指向的内存,delete[]释放new分配的对象数组指针指向的内存。
首先给大家先介绍下new和delete的一些基础用法:
一、new
new 数据类型 ; //申请内存空间。
new 数据类型 (初值); //申请内存空间时,并指定该数据类型的初值。
new 数据类型 [内存单元个数]; //申请多个内存空间。
new 数据类型 [内存单元个数](); //只能初始化为零
二、 delete
int* p3 = new int;
delete p; //释放空间与资源
int* p2 = new int[10];
delete []p2; //"[]"代表长度并开辟内存
接下来我们一起来看段代码,来区别今天主要的内容delete和delete[]:
class Test
{
public:
Test(int a = 0) :ma(a)
{
std::cout << "Test::Test(int)" << std::endl;
}
~Test()
{
std::cout << "Test::~Test()" << std::endl;
}
private:
int ma;
};
int main()
{
Test* p = new Test; //第一种
delete p;
//Test* p = new Test[10]; //第二种
//delete []p;
return 0;
}
如果运行第一种结果会是:
如果运行第二种结果是:
总结:所以我们也可以看出来第一种的new和delete只调用一次构造和析构,而第二种的new和delete是调用十次,这也是我们做题时候会遇到的一个考点。