auto_ptr
- 我们申请一块内存并且绑定在auto_ptr p上面,当p离开作用域之后调用析构函数。
- 但是存在一些问题。
- auto_ptr赋值给另一个auto_ptr之后所有权转移,但是所有权不会转移回来。
- auto_ptr不能指向new[]
- auto_ptr不能指向容器
shared_ptr
- 共享所有权
- 多个指针可以指向一块内存,最后一个shared_ptr离开作用域的时候释放内存。
- make_shared用来创建shared_ptr, use_count()查看引用计数
- get()用来获取shared_ptr绑定的内存
- reset()释放所有权
- unique()判断是否是唯一指向当前内存块的shared_ptr
- 循环引用,为了解决weak_ptr
- 来自两个不同组的shared_ptr指向同一块内存块
weak_ptr
- 以shared_ptr为参数构建
- weak_ptr指向另一个weak_ptr增加的是弱引用计数
unique_ptr
- 遵循着独占语义
- 析构函数用delete[]代替delete
- unique_ptr赋值给另一个unique_ptr是所有权被转移
- 只支持移动语义,不支持赋值语义