c++中动态申请空间的它们——new和delete

今天重点说的是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;
}

如果运行第一种结果会是:

如果运行第二种结果是:

c++中动态申请空间的它们——new和delete_第1张图片

       总结:所以我们也可以看出来第一种的new和delete只调用一次构造和析构,而第二种的new和delete是调用十次,这也是我们做题时候会遇到的一个考点。  

你可能感兴趣的:(c++中动态申请空间的它们——new和delete)