Boost 中的智能指针
这篇文章主要介绍 boost 中的智能指针的使用。
内存管理是一个比较繁琐的问题,C++中有两个实现方案: 垃圾回收机制和智能指针。垃圾回收机制
因为性能等原因不被 C++的大佬们推崇, 而智能指针被认为是解决 C++内存问题的最优方案。
1. 定义
一个智能指针就是一个 C++的对象, 这对象的行为像一个指针,但是它却可以在其不需要的时候自
动删除。注意这个“其不需要的时候”, 这可不是一个精确的定义。这个不需要的时候可以指好多方面:局
部变量退出函数作用域、类的对象被析构……。所 以 boost 定义了多个不同的智能指针来管理不同的场景。
shared_ptr<T>
内部维护一个引用计数器来判断此指针是不是需要被释放。是
boost 中最常用的智能指针了。
scoped_ptr<t>
当这个指针的作用域消失之后自动释放
intrusive_ptr<T>
也维护一个引用计数器,比 shared_ptr 有更好的性能。但是
要求 T 自己提供这个计数器。
weak_ptr<T>
弱指针,要和 shared_ptr 结合使用
shared_array<T>
和 shared_ptr 相似,但是访问的是数组
scoped_array<T>
和 scoped_ptr 相似,但是访问的是数组
2. Boost::scoped_ptr<T>
scoped_ptr 是 boost 中最简单的智能指针。scoped_ptr 的目的也是很简单, 当一个指针离开其作
用域时候,释放相关资源。特别注意的一定就是 scoped_ptr 不能共享指针的所有权也不能转移所有权。
也就是说这个内存地址就只能给的声明的变量用,不能给其他使用。
下面是 scoped_ptr 的几个特点:
• scoped_ptr 的效率和空间的消耗内置的指针差不多。
• scoped_ptr 不能用在标准库的容器上。(用 shared_ptr 代替)
• scoped_ptr 不能指向一块能够动态增长的内存区域(用 scoped_array 代替)
1 class test
2 {
3 public:
4 void print()
5 {
6 cout << "test print now" <<endl;
7 }
8 };
9 int _tmain(int argc, _TCHAR* argv[])
10 {
11 boost::scoped_ptr<test> x(new test);