C++Primer_ch12

本文详细介绍了C++中的动态内存管理,包括动态内存与智能指针的作用,动态数组的使用,以及如何使用标准库进行文本查询。重点讲解了`shared_ptr`和`unique_ptr`的特性,强调了正确管理和释放动态内存的重要性,以及在异常处理中避免内存泄漏的策略。
摘要由CSDN通过智能技术生成

第12章 动态内存

12.1 动态内存与智能指针
12.2 动态数组
12.3 使用标准库:文本查询程序


12.1 动态内存与智能指针
  • 对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销毁;除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称为自由空间。程序用堆来存储动态分配对象。动态对象的生存期由程序控制

  • 在C++中,动态内存的管理是通过一对运算符来完成的:
    new,在动态内存中为对象分配空间并返回一个指向该对象的指针,可以选择对对象进行初始化
    delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存

  • 新的标准库提供了两种智能指针类型来管理动态对象。新标准库提供的这两种智能指针的区别在于管理底层指针的方式:
    shared_ptr 允许多个指针指向同一个对象
    unique_ptr则独占所指向的对象
    另外还定义了一个名为weak_ptr的伴随类,是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中

  • 类似于vector,智能指针也是模版,当创建一个智能指针时,必须提供指针可以指向的类型。默认初始化的智能指针中保存着一个空指针。解引用一个智能指针返回它指向的对象
    在这里插入图片描述 在这里插入图片描述

  • shared_ptr类
    在这里插入图片描述
    在这里插入图片描述
    make_shared函数.
            最安全的分配和使用动态内存的方法就是调用一个名为make_shared函数,此函数在动态内存中分配一个对象并初始化它,返回指向该对象的shared_ptr。make_shared也定义在头文件memory中
    在这里插入图片描述
    传递的参数必须与string的某个构造函数相匹配,通常用auto定义一个对象来保存
    在这里插入图片描述
    shared_ptr的拷贝和赋值.
            当进行拷贝和赋值时,每个shared_ptr都会记录有多少个其他的shared_ptr指向相同的对象。每个shared_ptr都有一个关联的计数器,通常称为其为引用计数拷贝一个shared_ptr ,计数器都会递增,给shared_ptr赋予一个新值或是shared_ptr被销毁,计数器就会递减。一旦一个shared_ptr的计数器变为0,它就会自动释放自己所管理的对象
    在这里插入图片描述
    shared_ptr自动销毁所管理的对象.
            通过另一个特殊成员函数–析构函数完成销毁工作。类似于构造函数,每个类都有一个析构函数。shared_ptr析构函数会递减它所指向的对象的引用计数,如果引用计数变为0,share_ptr的析构函数就会销毁对象,并释放它所占用的内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值