C++动态内存开辟与释放new和delete

简介: new和delete

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

🐰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;

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸



相关文章
|
5天前
|
存储 程序员 C++
C++堆内存分配
C++堆内存分配
14 2
|
4天前
|
存储 安全 程序员
C++语言中的内存管理技术
C++语言中的内存管理技术
|
4天前
|
存储 缓存 程序员
C++内存管理:避免内存泄漏与性能优化的策略
C++内存管理涉及程序稳定性、可靠性和性能。理解堆和栈的区别至关重要,其中堆内存需手动分配和释放。避免内存泄漏的策略包括及时释放内存、使用智能指针和避免野指针。性能优化策略则包括减少内存分配、选用合适数据结构、避免深拷贝及缓存常用数据。通过这些最佳实践,可提升C++程序的效率和质量。
|
7天前
|
编译器 C语言 C++
【内存分布管理】new与malloc以及delede与delete[]的区别
【内存分布管理】new与malloc以及delede与delete[]的区别
|
7天前
|
存储 C语言 C++
【C++】C&C++内存管理
【C++】C&C++内存管理
|
7天前
|
安全 C++ 容器
C++ 动态内存
C++ 动态内存
13 0
|
5天前
|
C++
C++派生类
C++派生类
16 0
|
5天前
|
存储 程序员 数据安全/隐私保护
C++类
C++类
17 0
|
6天前
|
设计模式 安全 Java
【C++】特殊类设计
【C++】特殊类设计
|
1天前
|
存储 编译器 程序员
c++存储类
c++存储类
16 3