new来分配内存
在c语言中我们可以使用malloc来分配内存,在c++中依旧可以使用,但c++提供了一种更加高效的方法——new运算符。
在c++中,我们为一个int类型的值分配内存,并且用指针来访问这个值。我们要告诉new,需要为哪种类型的数据分配内存,new找到一个长度正确的内存,并返回该空间的地址。int *p=new int;
new int告诉我们需要开辟一个int大小的内存,new根据类型来确定需要多少字节内存,然后找到内存,返回地址。接着把地址赋给p,p被声明为指向int的指针,现在p是地址,*p是存在内存中的值。
delete释放内存
当需要内存时,可以使用new来请求,但使用new运算符时必须与delete匹配使用,使得在使用完内存后,将其归还,是通向有效使用内存的关键一步,归还或者释放内存以供其他部分使用,使用delete时需要与new分配的内存块匹配。int *ps=new int;//用new开辟一个int类型大小的空间返回地址给ps delete ps;//释放ps所指向的空间
delete会释放ps所指向的空间但不会删除ps指针本身,例如可以将ps重新指向一个新的空间。new和delete一定要匹配使用,否则可能会发生内存泄漏问题,也就是说已经分配的内存无法再次使用。如果内存泄漏严重,程序将由于不断寻找内存而终止。
不要尝试释放已经释放的内存块,c++标准指出,这样的结果无法预测,另外不能使用delete来释放声明变量所分配的内存。int *p=new int; delete p; int ps=5; int *pi=&ps; delete pi;
delete只能释放new开辟的空间,但是对空指针使用delete是安全的
注意,使用delete的关键在于,它用于new分配的内存。这并不意味着要使用new的指针,而是new的地址int *ps=new int; int *pq=ps; delete pq;
一般来说不会创建两个同时指向同一块内存的指针,因为这将增加错误的删除同一个内存块两次的可能,但对于返回指针的函数,使用另一个指针确实有道理。
new开辟动态数组
c++中创建动态数组很容易,只要将数组的元素数目和元素类型告诉new,在类型后面加上方括号[ ],其中包含元素个数,例如:int *p=new int[10];//创建一个元素数目为10的数组;
new返回第一个元素的地址。该地址被赋给指针p。
当程序使用完new后应该用delete来释放他。但是对于new开辟的数组,应该使用另一种格式来释放:delete [ ] p;
方括号告诉我们,应该释放整个数组而不仅仅是指针指向的元素。new和delete之间应该匹配使用,new匹配delete,new[ ] 匹配delete [ ]。
总之,使用new和delete时遵守以下规则:
1.不要使用delete来释放不是new开辟的内存。
2.不要使用delete多次释放同一个内存块。
3.如果用new[ ]为数组分配内存,则应该使用delete [ ] 来释放内存。
4.对空指针delete是正确的
new和delete的用法(C++)
最新推荐文章于 2024-07-11 10:59:43 发布
本文介绍了C++中的动态内存管理,包括使用new运算符为特定类型数据分配内存,通过delete释放内存以避免内存泄漏,以及如何使用new创建和delete释放动态数组。强调了new和delete匹配使用的重要性,以及避免重复释放同一内存块和释放未分配内存的规则。
摘要由CSDN通过智能技术生成