1.分配再静态或栈内存中的对象由编译器自动创建销毁。

2.C++中动态内存的管理是通过
new:前者为对象非配空间并返回一个指向该对象的指针。
delete:接受一个动态对象的指针,摧毁该对象,并释放与之关联的内存。
智能指针:负责自动释放所指对象,都定义在memory头文件中
shared_ptr:允许多个指针指向同一个对象
unique_ptr:独占所指对象。
weak_ptr:弱引用,指向shared_ptr所指的对象。

3.make_shared函数是最安全的分配和使用动态内存的方法。
使用例子:
auto p = make_shared<vector<string>>();

4.每个shared_ptr都有一个关联的计数器,称为引用计数。拷贝,函数传参,函数值返回,关联计数器都会递增。当我们给这个shared_ptr赋予新值或是shared_ptr被销毁时,计数器递减。

5.构造函数控制初始化,析构函数负责销毁该对象是进行什么操作。

6.释放一块并非new分配的内存或者将相同的指针值释放多次,行为未定义。释放一个空指针是没有错误的。

7.使用动态内存管理三个常见的问题:
①.忘记delete内存。
②使用已经释放掉的对象。通过在释放内存后将指针置为空,有时可以检测褚这个问题。
③同一块内存释放两次。两个指针指向相同的动态内存空间。对其中一个指针进行了delete后又对另一个进行delete。

8.我们不能将一个内置指针隐式的转换为一个智能指针,一个返回shared_ptr的函数不能再其返回语句中隐式转换一个普通指针

9.当将一个shared_ptr绑定到一个普通指针时,我们将内存的管理交给了这个shared_ptr。一旦这样做了,我们就不应该再使用内置指针来访问shared_ptr所指的内存了。

10.get用来将指针的访问权限传递给代码,你只有再确定代码不会delete指针的情况下,才能使用get。特别的是,永远不要用get初始化另一个智能指针或者为另一个智能指针赋值

11.release:调用release会切断unique_ptr和它原来管理的对象间的联系。release返回的指针通常被用来初始化另一个智能指针或给另一个智能指针赋值。

12.一般来说unique_ptr不能拷贝,但是有一个例外:我们可以拷贝或者赋值一个将要被销毁的unique_ptr。最常见的就是从函数返回一个unique_ptr。

Chapter12(动态内存)--C++Prime笔记的更多相关文章

  1. C++学习 之 指针及动态内存分配(笔记)

    1. 指针 1.1 指针的含义: 简单来说,指针是存储内存地址的变量.当我们声明了一个指针变量后,使用该指针时系统会根据指针内的地址索引内存块,读取内存内的值.指针因为是用来存地址的,所以一般固定长度 ...

  2. 《C++ Primer Plus》第12章 类和动态内存分配 学习笔记

    本章介绍了定义和使用类的许多重要方面.其中的一些方面是非常微妙甚至很难理解的概念.如果其中的某些概念对于您来说过于复杂,也不用害怕——这些问题对于大多数C++的初学者来说都是很难的.通常,对于诸如复制 ...

  3. 【c++ Prime 学习笔记】第12章 动态内存

    对象的生存期: 全局对象:程序启动时创建,程序结束时销毁 局部static对象:第一次使用前创建,程序结束时销毁 局部自动对象:定义时创建,离开定义所在程序块时销毁 动态对象:生存期由程序控制,在显式 ...

  4. Chapter12:动态内存

    智能指针——shared_ptr 为了更容易地使用动态内存,新的标准提供了智能指针来管理动态对象.智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象. 智能指针的使用方式与普通指针类似. ...

  5. 《C和指针》 读书笔记 -- 第11章 动态内存分配

    1.C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放,这些函数维护一个可用内存池. void *malloc(size_t size);//返回指向分配的内存块起始位置的 ...

  6. C++学习笔记(十一):void*指针、类型转换和动态内存分配

    void*指针 void关键字表示“空类型”的概念.但是,这里的“空类型”不表示“任意类型”,而是表示不存在的意思,也就是说C/C++不允许你写语句void a,不存在类型为void的东西. void ...

  7. c++学习笔记—动态内存与智能指针浅析

    我们的程序使用内存包含以下几种: 静态内存用来保存局部static对象.类static数据成员以及定义在任何函数之外的变量,在使用之前分配,在程序结束时销毁. 栈内存用来保存定义在函数内部的非stat ...

  8. 《C++ Primer Plus》读书笔记之十—类和动态内存分配

    第12章 类和动态内存分配 1.不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.可以在类声明之外使用单独的语句进行初始化,这是因为静态类成员是单独存储的,而不是对象的 ...

  9. C语言学习笔记--动态内存分配

    1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确 ...

随机推荐

  1. 君学,佳一tvodp文件破解

    tvodp文件破解的意思就是,越过加密部分直接提取内部原始文件,难度较大,方法用U盘刻老毛桃pe,然后电脑启动pe,在pe中打开文件,做提取工作, 本人淘宝破解:https://item.taobao ...

  2. linux命令系列 stat & touch

    1. stat - display file or file system status stat命令主要用于显示文件或文件系统的状态,详细信息 事实上,stat命令显示的是文件的I节点信息.Linu ...

  3. Django_用户权限管理rbac

    组成部分 1.初始化权限:login视图initial_permission,把权限信息放入session.initial_permission函数生成权限列表.菜单列表 2.中间件验证权限:在第一次 ...

  4. 常用DB2命令

    建库 db2 territory CN on 建库到指定位置 db2 create database OADB on D: using codeset GBK territory CN 列出所有数据库 ...

  5. 奔跑吧DKY——团队Scrum冲刺阶段-Day 2

    今日完成任务 各个成员今日完成的任务(如果完成的任务为开发或测试任务,需给出对应的Github代码签入记录截图:如果完成的任务为调研任务,需给出对应的调研总结博客链接:如果完成的任务为学习技术任务,需 ...

  6. Javascript面向对象二

    Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...

  7. Head First Java & static

  8. profibus 的DPV0 和DPV1

    DP的功能经过扩展,一共有3个版本:DP-V0,DP-V1和DP-V2.有的用户手册将DP-V1简写为DPV1. 1.基本功能(DP-V0) (1)总线访问方法:各主站之间为令牌传送,主站与从站间为主 ...

  9. Java的Bean

    Bean的定义 遵循Sun的Java Bean规范编写的特殊类 Java Bean的规范 类的访问控制权限是public 类提供有一个无参的构造函数 类的属性的访问控制权限是private,通过set ...

  10. Window系统 安装TFLearn

    1. 确保成功安装了tensorflow 2. 查看当前tensorflow下的库文件,判断是否已经安装了h5py,scipy:conda list 3. 若没有安装,安装h5py,scipy.我的电 ...