C++ 智能指针
本文主要介绍 C++11 引入的三个智能指针: std::unique_ptr<T>
、std::shared_ptr<T>
和 std::weak_ptr<T>
不要忘记添加头文件 memory
std::unique_ptr<T>
这个指针会在离开指针作用域时自动释放资源。
例子:
1 | { |
等价于
1 | { |
注意:同一时刻只能有一个unique_ptr
指针指向给定资源,即这个指针是move-only
的,这主要是为了防止一个资源被释放后,再通过另外一个指针访问。
例如:
1 | { |
std::shared_ptr<T>
这个指针是对指向的资源引用进行计数,当引用计数为0时,则释放资源。正因如此,这个指针的性能开销要略大于 裸指针 和 unique_ptr
。
例子:
1 | { |
我们可以通过方法use_count()
查看引用计数:
1 | { |
std::weak_ptr<T>
这个指针是为了配合std::shared_ptr
而引入的一种智能指针,不具有普通指针的行为。std::weak_ptr
可以指向std::shared_ptr
指向的资源而不改变引用计数。当指向的std::shared_ptr
所指向的资源被释放时,std:::weak_ptr
指针会自动变成空指针。
当要使用std::weak_ptr
指针时,则需要将其提升为std::shared_ptr
指针。
例子:
1 | { |
小结
std::unique_ptr<T>
:用于资源被独占的情况下std::shared_ptr<T>
:用于资源被共享的情况下std::weak_ptr<T>
:解决循环引用等问题
参考资料:
https://zhuanlan.zhihu.com/p/150555165
https://www.cnblogs.com/wxquare/p/4759020.html