文章目录
- 智能指针
- unique_ptr
- 特点一——无法进行复制
- shared_ptr
- 特点一——可复制
- 特点二——计数器(用于确定删除的时机)
- 其他
智能指针
通常的指针是需要特殊地去申请对应的空间,并在不使用的时候还需要人工去销毁。
而智能指针相对普通的指针将申请和销毁封装到整个指针内部,于是就不用特地去人为的申请和销毁。
unique_ptr
特点一——无法进行复制
原因可以通过查看智能指针的源码得到。
由上图观察得到,智能指针的源码删除了智能的构造函数和赋值运算(的重载),所以没办法对智能指针进行复制。
这样做也是为了避免错误。当智能指针离开作用域后,将自行进行销毁,如果说智能指针真能复制的话,那么全部复制了的智能指针也会销毁,但已经销毁了,就没有必要再有销毁这个功能了。
shared_ptr
特点一——可复制
使用shared_ptr的话,是可以将其进行复制的。
这点是不同于unique_ptr的。
特点二——计数器(用于确定删除的时机)
每一个shared_ptr都会指向同一个事物,从而会绑定上一个计数器。
当增添一个shared_ptr/引用,计数器就会加一。
而删除一个shared_ptr/引用,计数器就会减一。
特别的,当计数器减为0时,整个事物才会进行删除。
其他
智能指针并不是能去代替全部的new()
和delete()
。
它只是说如果当前场景是懒得去人工删/不需要人工删的情况,可以考虑使用智能指针。
并且优先使用unique_ptr
,因为其占用的内存小。