06 动态内存

本文详细介绍了C++中动态内存管理的过程,包括如何使用`new`申请内存、基本数据类型和数组的初始化、内存释放以及在内存不足情况下的处理。特别强调了数组使用`new`操作符与不使用时的区别,以及`new`运算符在初始化堆内存时的用法。同时,文章提到了在删除内存时应注意使用`delete[]`以避免错误。
摘要由CSDN通过智能技术生成


link: geeksforgeeks

1.申请新的内存

​ 模板:

pointer-variable = new data-type;

​ 以下是使用实例:

int *p = NULL; 		 // 指针初始化为空
p = new int;  		 // 然后对变量索取内存

等价于↓↓↓

int *p = new int; 

2.基本数据类型初始化内存

​ 我们可以通过 new 运算符来为int、float等基本的数据类型来初始化内存。如果是自定义的数据类型的话,则需要一个 构造函数 来初始化内存。

int *p = new int(25);          //对int类型分配内存
float *q = new float(75.25);	//对float类型分配内存

// 自定义的数据类型
struct cust
{
    int p;
    cust(int q) : p(q) {}
};

cust* var1 = new cust;    // Works fine, doesn't require constructor

        OR

cust* var1 = new cust();        // Works fine, doesn't require constructor


cust* var = new cust(25)        // Notice error if you comment this line

3.数组类型内存初始化

​ 模板:

pointer-variable = new data-tpye[size];

​ 使用实例:

int *p = new int[10];

​ 这句话为 10个int类型的分配内存,然后返回第一个元素的指针给p。

4.数组用 new 或者不用的区别

​ 数组不使用 new 的话,数组就会自动通过编译器销毁(在它所在的函数结束时销毁);而使用 new 的话,数组就不会自动的销毁,而是等待销毁命令才会销毁。

5.删除内存

​ 实例:

delete q;							//删除基本变量
delete[] p; 						//删除数组

  当使用 new int[n] 的时候除了,会申请 n 个int类型的字节数,还会在前面额外多申请4个字节来保存 int 的个数。所以,删除的时候一定要配套使用 delete[] ,否则不能读取要删除的个数。

6.当运行的时候,没有足够内存

​ 当没有足够内存的情况下,这个请求就会抛出类型为 std::bad_alloc 的异常指示。除非,将 nothrownew 一起使用,这种情况下,它会返回一个NULL指针。

7、堆内存定义的初始化

int* p1 = new int;	//用new开辟了一个新的内存,p 指向它,设置断点跟踪,它的内存没有初始化

int *p2 = new int();//对这个新开的值进行了初始化

//以下同理:
int *p3 = new int[10]();
int *p4 = new string();

  这种写法对内置的类型才有意义,自己自定义的类是没有效果的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值