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()返回的指针&#