🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
🐰new和delete
new和delete运算符是C++管理内存的方式,在C语言里实现近似功能的函数是malloc和free。
malloc函数原型:
void* malloc(int size);
向系统申请分配指定的size字节的内存空间,返回类型是void*类型
free函数原型:
void free(void* block);
把block所指向的空间释放。形参是void*类型,所以free可以释放任意类型的指针
C语言的内存管理是通过函数进行的,优点缺点如下:
(1)函数返回值是void*类型,在将这个地址给指针进行赋值时,必须进行强制类型转换。
(2)分配内存单元时根据参数size的值来分配的,如果size是错误的,系统仍然分配单元,无法检查出错误。
C++提供了简便而功能较强的运算符new和delete。
new是C++新增的用来用来动态申请内存的运算符,它的作用是申请到一段指定数据类型大小的内存。
使用格式:
指针变量 =new 数据类型;
使用new分配整形内存单元:
1. #include<iostream> 2. using namespace std; 3. int main() 4. { 5. int* p=nullptr; 6. p=new int;//new将申请一个整形的内存空间,将这个内存空间的首地址存放到指针变量p中 7. cout<<*p<<endl; 8. return 0; 9. } 10. 结果:0 11. 向内存动态申请了一整形空间,因为没有给空间赋值,所以里面是随机值,这里是0
使用new申请内存更加方便,而且new返回所申请数据类型的指针,再将内存的首地址给指针p时不需要强制类型转换
通过new运算符申请的内存单元是当程序运行到包含new语句时才分配的,称为动态内存的分配,这是堆上申请的空间,除非程序退出,才会把内存归还给系统。所以必须自己去释放通过new得到的内存单元
与new对应的释放内存空间运算符是delete,使用delete的格式如下:
delete 指针变量;
delete将释放指针所指向的内存单元:
1. #include<iostream> 2. using namespace std; 3. int main() 4. { 5. int* p=nullptr; 6. p=new int;//new将申请一个整形的内存空间,将这个内存空间的首地址存放到指针变量p中 7. cout<<*p<<endl; 8. delete p;//delete将释放p所指向的内存单元 9. p=nullptr; 10. return 0; 11. }
new也可以在申请内存空间的同时对该内存空间进行初始化
1. 指针变量=new 数据类型(初值);//传统圆括号初始形式 2. 指针变量=new 数据类型{初值};//C++11引入的列表初始化 3. 例如: 4. int* p=new int(520); 5. int* p=new int{520};
new和delete除了用于分配和释放单个变量的空间。还可以分配和释放连续变量的存储空间。例如申请一个数组空间,使用new[]和delete[]
new[]
1. 指针变量=new 数据类型[元素个数]; 2. int* p=new int[10]; 3. 可以申请存放20个整数的连续空间
delete[]
1. delete []指针变量; 2. delete []p; 3. p=nullptr;
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸