智能指针
平时在写代码时,很容易会犯这样的错误
1 |
|
1 |
|
库里面的智能指针
1.不带引用的计数的智能指针 一个资源只能由一个只能指针指向
1 | auto_ptr:拷贝构造、赋值操作=》旧的auto_ptr::mptr全部置成nullptr,只有新的auto_ptr指向合法的资源。 |
1 |
|
1 |
|
a.unique_ptr把左值引用参数的拷贝构造函数和operator=函数给delete掉了,但是它提供了带右值引用参数的拷贝构造函数和operator=函数,为什么?这样做有什么用处???
b.为什么带引用计数的智能指针要提供两个,一个不行吗?
2.带引用计数的智能指针 一个资源可以由多个智能指针指向
1 | shared_ptr: |
看下shared_ptr使用
shared_ptr(强智能指针):代码上如果只使用shared_ptr,会发生什么问题?智能指针的交叉引用问题???那它该怎么解决呢???
发生了资源泄露,这时候引入弱智能指针
定义对象的时候用强智能指针,引用对象时用弱智能指针,weak_ptr只是一个观察者,并不会改变资源的引用计数
weak_ptr(弱智能指针):它有什么用处,它用来弥补shared_ptr的哪些不足的???
weak_ptr只是一个观察者,并不会改变资源的引用计数,和shared_ptr配合使用,可以解决智能指针的交叉引用问题。
1 |
|
手写shared_ptr和weak_ptr
1 |
|