boost C++库学习(1)-- smart pointers

1.  作用域指针boost::scoped_ptr

       一个作用域指针boost::scoped_ptr.独占一个动态分配的对象。一个作用域指针不能传递它所包含的对象的所有权到另一个作用域指针。

#include <boost::scoped_ptr.hpp>

int main()
{
  boost::scoped_ptr<int> i(new int);
  *i = 1;
  *i.get() = 2;
  i.reset(new int);
}
重载了操作符operator*(), operator->(). get()返回所含对象的地址,reset()用新的对象来重新初始化智能指针,新创建的对象赋值之前会先自动释放所包含的对象。


2.  作用域数组boost::scoped_array

       作用域数组的析构函数使用delete[]操作符来释放所包含的对象。

#include <boost/scoped_array.hpp>

int main()
{
    boost::scoped_array<int> i(new int[2]);
    *i.get() = 2;
    i[0] = 1;
    i[1] = 2;
    i.reset(new int[3]);
}
3.  共享指针shared_ptr

任何一个共享指针都可以被复制,当引用对象的最后一个智能指针销毁后,对象才会被释放。标准容器里可以存储智能指针,而标准容器中不能存放std::auto_ptr.

#include <boost/shared_ptr.hpp>
#include <vector>

int main()
{
    std::vector<boost::shared_ptr<int> > v;
    v.push_back(boost::shared_ptr<int>(new int(1)));
    v.push_back(boost::shared_ptr<int>(new int(2)));
    *(v[1].get()) = 3;
    std::vector<boost::shared_ptr<int> >::iterator iter;
    iter = v.begin();
    *((*iter).get()) = 4;
    *((*(v.begin()))) = 5;
    std::vector<boost::shared_ptr<int> >::iterator iter1;
    iter1 = v.end() -1;      //注意v1.end()指向的是最后一个元素的下一个位置,所以访问最后一个元素
                             //的正确操作为:v1.end() - 1;
    *((*iter1).get()) = 6;
}
#include <boost/shared_ptr.hpp> 

int main() 
{ 
  boost::shared_ptr<int> i1(new int(1)); 
  boost::shared_ptr<int> i2(i1); 
  i1.reset(new int(2)); 
} 
本例中定义了2个共享指针 i1 和 i2,它们都引用到同一个 int 类型的对象。i1 通过 new 操作符返回的地址显示的初始化,i2 通过 i1 拷贝构造而来。 i1 接着调用 reset(),它所包含的整数的地址被重新初始化。不过它之前所包含的对象并没有被释放,因为 i2 仍然引用着它。 智能指针 boost::shared_ptr 记录了有多少个共享指针在引用同一个对象,只有在最后一个共享指针销毁时才会释放这个对象。

4.共享数组shared_array

#include <boost/shared_array.hpp> 
#include <iostream> 

int main() 
{ 
  boost::shared_array<int> i1(new int[2]); 
  boost::shared_array<int> i2(i1); 
  i1[0] = 1; 
  std::cout << i2[0] << std::endl; 
} 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值