智能指针的原理基于一个常见的习语叫做 RAII (Resource Acquisition Is Initialization):资源申请即初始化。
用一个动态分配的对象的地址来初始化智能指针,在析构的时候释放内存,就确保了这一点。 因为析构函数总是会被执行的,这样所包含的内存也将总是会被释放。
与C++——智能指针所不同。
Boost库中支持了:
1、作用域指针 boost::scoped_str:一个作用域指针独占一个动态分配的对象。
2、作用域数组 boost::scoped_array:工作方式与1一样,但适用于多个对象。
3、共享指针 boost::shared_str:不一定要独占一个对象。 它可以和其他 boost::shared_ptr
类型的智能指针共享所有权。
4、共享数组 boost::shared_array:工作方式与3一样,但适用于多个对象。
5、弱指针 boost::weak_ptr:监控共享指针,只有在配合共享指针一起使用时才有意义。
6、介入试指针 boost::intrusive_ptr:自定义共享数量,工作方式和共享指针一样。
7、指针容器 boost::ptr_vector:存储同类智能指针。
作用域指针
#include <boost/scoped_ptr.hpp>
#include <iostream>
using namespace std;
int main()
{
boost::scoped_ptr<int> i(new int);
boost::scoped_ptr<int> temp(new int);
*temp = 3;
*i = 1;
cout << *i << endl;
*i.get() = 2; //改变对象的值
cout << "get >> " << *i << endl;
i.swap(temp); //交换智能指针所值对象
cout <<