c++Primer——第十二章:动态内存

本文详细介绍了C++中的动态内存管理,包括静态内存、栈内存和堆内存的分配方式。重点讨论了智能指针,如shared_ptr、unique_ptr和weak_ptr的使用,以及如何避免智能指针的常见陷阱。此外,还涵盖了new分配数组的操作和allocator在内存管理中的作用。
摘要由CSDN通过智能技术生成

1、三种内存分配方式

  • 静态内存:局部static对象、类static成员、全局变量
  • 栈:局部非static对象
  • 堆:程序运行时动态分配的对象

2、智能指针概述

  • shared_ptr:允许多个指针指向同一个对象
  • unique_ptr:独占所指向的对象
  • weak_ptr:一种指向shared_ptr管理对象的弱引用,为解决shared_ptr的循环引用问题而提出的

3、内存耗尽

一旦一个程序用光了所有可用的内存,new就会失败,默认情况下,会抛出一个类型为bad_alloc的异常。但是我们可以改变使用new的方式来阻止它抛出异常——定位new

	int* p1 = new int;//如果分配失败 new抛出std::bad_alloc
	int* p2 = new (nothrow) int; //如果分配失败,返回空指针

4、用new来初始化智能指针

接受指针参数的智能指针构造函数是explicit的,因此不能将一个内置指针隐式转换为一个智能指针,必须使用直接初始化形式来初始化一个智能指针。

	shared_ptr<int> p1 = new int(10); //错误 必须使用直接初始化形式
	shared_ptr<int> p2(new int(10)); //正确

5、智能指针陷阱

  • 不使用相同的内置指针值初始化多个智能指针
  • 不delete get()返回的指针
  • 不使用get()初始化或reset另一个智能指针
  • 如果你使用get()返回的指针&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值