啃书《C++ Primer Plus》 动态内存管理(上) new和delete的使用

本文介绍了C++中的动态内存管理,包括new和delete关键字的使用,new[]和delete[]操作动态数组,以及定位new运算符。详细阐述了动态内存的分配与释放,强调了正确匹配new和delete以防止内存泄漏的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一节来梳理有关动态内存管理的内容。
首先是C++风格的动态内存的创建与释放,指得是newdelete关键字的使用,相较于C语言的mallocfree他们的功能更加丰富,使用也更加方便。

啃书《C++ Primer Plus》 面向对象部分 动态内存管理(中) 动态对象的创建 重载new和delete

《动态内存管理》内容思维导图如下:
在这里插入图片描述


动态内存的分配与释放

new和delete关键字的使用

new和delete

newdelete关键字是C++动态内存的基础,用于分配和释放动态内存。

相较于C语言的mallocnew在申请内存时可以不必考虑具体内存的大小而是专注于根据怎样的类型来申请内存,它会自动计算所给类型的大小并为之申请相应大小的空间。

它的用法如下:

new 类型名称;
new 类型名称(初始化数据);

对于前一种,编译器会给予变量默认的赋值。对于基本类型,这个值是0,对于对象则会调用其无参构造函数。

语句的执行结果将是该类型的指针,指向刚刚分配的内存。

将上面的用法补写完整就是:

类型名称 * 指针名称 = new 类型名称;
类型名称 * 指针名称 = new 类型名称(初始化数值);

这块分配出来的内存与常规定义变量分配的内存块不同,这些内存是分配在堆区(自由存储区)而非栈区。因此即使指向其指针的作用域失效,该内存也不会像栈区变量那样被释放,而是会继续保留。如果没有及时的清理或是寻找另一个继续指向他的指针。该快内存就会变得不能访问,却依然占据着空间。

因此,申请了动态内存,还应当在使用完后将其“归还”给计算机。(好借好还,再借不难嘛)
将内存归还也就是释放,需要使用到delete关键字。

用法如下:

delete 指针;

需要注意的是:

  • newdelete关键字必须搭配使用,即申请的动态内存必须进行释放,否则将会造成内存泄漏。
  • 应当避免对同一动态内存的多次释放,会造成未知的问题。
  • delete对于空指针是安全的
  • 不要使用delete释放非new关键字分配的内存

看下面一个例子

int main()
{
   
   
	int* pI = new int;
	double* pD = new double(3.14);
	std::cout << *pI << std::endl;
	std::cout << *pD << std::endl;
	delete pI;
	delete pD;
}

执行结果:
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值