c的free和c++的delete的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c的free和c++的delete的区别相关的知识,希望对你有一定的参考价值。
二者都是释放内存,主要区别如下:
free是C语言的函数;delete是C++的运算符;
delete在处理对象时,会自动调用类的析构函数函数,而free不知道构造函数为何物,这个对通过析构函数需要释放资源的程序特别重要,特别重要吗,特别重要!
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的free和c++的delete的区别的主要内容,如果未能解决你的问题,请参考以下文章