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. lambda----jdk8重头戏

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  2. zookeeper客户端相关命令

    windows环境:    本机 直接 点机zkcli.cmd linux环境: 连接到zookeeper server ./zkCli.sh -server localhost:2181 help命 ...

  3. c++课的圆周面积

    又回顾了一下一两个月没动过的类,似乎又有点手生了,不过还好还可以做. 在栋哥的推荐下下载了一个vs2015,表示从dev的白鼠形式的简单操作缓过来还有些不习惯呢,不过有些功能,例如诊断还是挺好用的 这 ...

  4. 使用Git进行代码管理心得------------个人练习

    一.在github.com上的操作   今天我们实践课程学习了用Git进行代码版本,使用github进行代码托管,我和队友在官网上创建了自己的Organization,将Auto CS fork到了小 ...

  5. 剑指offer:旋转数组的最小数字

    题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...

  6. 剑指offer:用两个栈实现队列

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 可以用stack1来存所有入队的数.在出队操作中,首先将stack1中的元素清空,转移到sta ...

  7. 软工实践l练习一一利用github托管项目

    这次实践的主题是在windows环境下将项目通过git将项目托管到github上.通过实践,基本掌握一些git命令的使用,在github上注册账号并学会创建repositly和organization ...

  8. 404 Note Found 团队会议纪要

    目录 团队会议 会议纪要1 会议纪要2 会议纪要3 会议纪要4 会议纪要5 会议纪要6 团队会议 会议纪要1 会议纪要2 会议纪要3 会议纪要4 会议纪要5 会议纪要6

  9. MySql点点滴滴(一)之可视化工具介绍

    以下的文章主要介绍的是10个可以简化开发过程的MySQL工具,其中包括MySQL Workbench.phpMyAdmin.Aqua Data Studio,以及SQLyog与MYSQL Front等 ...

  10. 使用 oracle pipelined 返回一个结果集;

    1.使用 create or replace package refcursor_pkg is -- Author : mr.yang -- Created : 5/14/2017 5:13:42 P ...