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

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数C初学者入门训练题解CC的使用文章「初学」C++数据结构

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

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

🐰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分配整形内存单元:

#include<iostream>
using namespace std;
int main()
{
    int* p=nullptr;
    p=new int;//new将申请一个整形的内存空间,将这个内存空间的首地址存放到指针变量p中
    cout<<*p<<endl;
    return 0;
}
结果:0
向内存动态申请了一整形空间,因为没有给空间赋值,所以里面是随机值,这里是0

使用new申请内存更加方便,而且new返回所申请数据类型的指针,再将内存的首地址给指针p时不需要强制类型转换

通过new运算符申请的内存单元是当程序运行到包含new语句时才分配的,称为动态内存的分配,这是堆上申请的空间,除非程序退出,才会把内存归还给系统。所以必须自己去释放通过new得到的内存单元

与new对应的释放内存空间运算符是delete,使用delete的格式如下:

delete 指针变量;

delete将释放指针所指向的内存单元:

#include<iostream>
using namespace std;
int main()
{
    int* p=nullptr;
    p=new int;//new将申请一个整形的内存空间,将这个内存空间的首地址存放到指针变量p中
    cout<<*p<<endl;
    delete p;//delete将释放p所指向的内存单元
    p=nullptr;
    return 0;
}

new也可以在申请内存空间的同时对该内存空间进行初始化

指针变量=new 数据类型(初值);//传统圆括号初始形式
指针变量=new 数据类型{初值};//C++11引入的列表初始化
例如:
int* p=new int(520);
int* p=new int{520};

new和delete除了用于分配和释放单个变量的空间。还可以分配和释放连续变量的存储空间。例如申请一个数组空间,使用new[]和delete[]

new[]

指针变量=new 数据类型[元素个数];
int* p=new int[10];
可以申请存放20个整数的连续空间

delete[]

delete []指针变量;
delete []p;
p=nullptr;

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

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值