C++ primer阅读之关联容器和动态内存

第11章

1. 对map,关键字是const,不可改变。set里的关键字也是不可改变的。

2.map的insert操作:返回值是一个pair,first成员是一个迭代器,指向元素,second是插入成功与否。

3.erase参数可以是迭代器或者key。

4.对map使用下标,注意和数组使用下标的区别。

5.访问元素:find,count,lower_bound和upper_bound。可以组合lower_bound和upper_bound来获得一个范围。二者组合的功能和equal_range一样。

6.无序容器使用哈希技术,存储上组织为一组桶。

第12章 动态内存

1。动态分配的对象的生存期只有当显式地释放时才会销毁,跟它在哪里被创建无关。

2.静态内存用来保存局部static对象,类static数据成员和定义在任何函数外地变量。栈内存保存函数内费static对象。

3.自由内存空间叫堆。存储动态分配的对象——在程序运行时分配的对象。

4.智能指针:shared_ptr和unique_ptr指针,都定义在memory头文件中。

5.shared_ptr最安全的分配和使用动态内存的方式是用make_shared函数。

6.将一个shared_ptr赋予另一个shared_ptr会递增赋值号右侧shared_ptr的引用计数,递减左侧shared_ptr的引用计数。

7.直接管理内存,new delete。

8.对内置类型,默认初始化的对象的值是未定义的,值初始化时可以的。

9.定位new, int *p = new(nothrow) int;分配失败,返回空指针,而不是std::bad_alloc。

10.delete必须接受一个指向动态分配内存的指针或者空指针。

11.由内置指针(不是智能指针)管理的动态内存在被显式释放前,一直会存在。

12.delete后重置指针值,防止空悬指针。一般充值nullptr。

13.可以用new返回的指针来初始化智能指针。内置指针不能隐式转换为智能指针,必须直接初始化。

14.不要混用普通指针和智能指针。

15.在new和delete代码之间发生异常,异常未被捕获的话,内存永远不会被释放。智能指针可以自动释放。

16.当智能指针管理的资源不是new分配的内存时:创建shared_ptr时,可以传递一个(可选)指向删除器函数的参数,这样指针被销毁时,不会用delete,而是用删除器函数。

17.unique_ptr独有它指向的对象,因此不支持拷贝和赋值。特殊情况,即将销毁的unique_pte可以,例如从函数返回。

18.unique_ptr使用release和reset将指针所有权转交。

19.weak_ptr:指向shared_ptr管理的对象,不会影响shared_ptr的引用计数。lock()函数检查其指向的对象是否存在。

20.new一个数组,int *p = new int[10];或者:typedef int arrT[10]; int *p = new arrT;

21.new数组时,并未得到一个数组类型的对象,而是一个指针。

22.动态分配一个空数组(长度0)时合法的。

23.释放动态数组:delete []  p; p必须为空或指向动态分配的数组。

24.unique_ptr可以管理动态数组,unique_ptr<int[]> up(new int[10]); up.release();自动用delete []销毁指针;可以用下标访问数组中元素;

25.shared_ptr不支持管理动态数组。除非提供自己定义的删除器;不支持下标访问元素;使用get()访问。

26.allocator类把内存分配和对象构造分离。allocator<string> alloc;(对象), auto const p = alloc,allocate(n);分配内存。这种分配是未构造的。construct函数来构造对象。destroy来销毁对象,deallocate来释放内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值