C++中delete与 delete []区别

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中delete与 delete []区别相关的知识,希望对你有一定的参考价值。

new调用构造函数,delete会调用对象的析构函数。

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。
delete只会调用一次析构函数,而delete[]会调用每一个数组元素的析构函数。

在More Effective C++中有更为详细的解释:“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operator delete来释放内存。”

delete与new配套,delete []与new []配套。

VC6 新建一个单文档工程;

加入一个普通类;名字为T;

加入后如下;

 

在构造和析构函数各加入一句代码;

 

添加一个菜单;菜单处理函数如下;

void CDeltestView::OnMenuitem32771() 

	// TODO: Add your command handler code here
	const int NUM = 3;
	CString str1;
 
	T* p1 = new T[NUM];
	//cout << hex << p1 << endl;
	//  delete[] p1;
	str1.Format("p1: %x",p1);
	AfxMessageBox(str1);
	delete p1;
 
	T* p2 = new T[NUM];
	//cout << p2 << endl;
	str1.Format("p2: %x",p2);
	AfxMessageBox(str1);
	delete[] p2;

点击菜单;运行到第一段代码时;

弹出3次 构造; 

 

然后显示p1的值;

 

之后弹出一次 析构;

 

运行到第二段代码时;也是先弹出3次 构造;

然后弹出显示p2的值;

 

然后弹出了3次 析构;

 

 

以上是关于C++中delete与 delete []区别的主要内容,如果未能解决你的问题,请参考以下文章

C++中delete和delete[]的区别[重复]

malloc/free与new/delete的区别与联系

new/delete 与 malloc/free的区别

C++—new/delete/malloc/free详解

[c++基础] delete 和 delete []的区别

C++中delete和delete[]的区别