C++:Boost 使用方法(智能指针)

参考资料:http://zh.highscore.de/cpp/boost/

智能指针

  智能指针: std::auto_ptr 。 基本上就像是个普通的指针: 通过地址来访问一个动态分配的对象。 std::auto_ptr 之所以被看作是智能指针,是因为它会在析构的时候调用 delete 操作符来自动释放所包含的对象。 当然这要求在初始化的时候,传给它一个由 new 操作符返回的对象的地址。
  std::auto_ptr在传递对象时,将对象的所有权传递给其他std::auto_ptr指针,也可使用release将指针所有权释放,给与对象指针。
  若无智能指针,则每一个动态分配内存的函数都需要捕捉所有可能的异常,以确保在异常传递给函数的调用者之前将内存释放掉。详情请查看Boost C++ 库 Smart Pointers。

方法:

get() :返回所含对象的地址;
reset() :用一个新的对象来重新初始化智能指针;
release():释放对其指针的所有权,并不调用delete;


RAII

资源申请即初始化,关键在于使用析构函数进行销毁对象,从而保证动态分配的内存得到释放


作用域指针

一个作用域指针独占一个动态分配的对象;不可直接使用‘=’更改指针指向的对象即不能将包含的对象转移给其他作用域指针,一旦使用reset转移,则使用delete释放原来的对象。

类名:

boost::scoped_ptr

位置:

boost/scoped_ptr.hpp

boost::scoped_ptr 的析构函数中使用 delete 操作符来释放所包含的对象。(注意与boost:scoped_array 类进行区分)

例子:

int main() 
{
   
    
  boost::scoped_ptr<int> i(new int); 
  *i = 1; 
  *i.get() = 2; 
  i.reset(new int); 
}

作用域数组

使用方式与作用域指针相似,作用域数组的析构函数使用 delete[] 操作符来释放所包含的对象。

类名:

boost::scoped_array

位置:

boost/scoped_array.hpp

例子:

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

共享指针

与作用域指针相似,但不一定独占一个对象。可以和其他指针共享对象有所有权,当指向对象的最后一个指针销毁之后,对象被释放。boost::shared_ptr 在内部记录着引用到某个对象的共享指针的数量。

类名:

boost::shared_ptr

位置:

boost/shared_ptr.hpp

boost::shared_ptr 的构造函数的第二个参数是一个普通函数或者函数对象,这个方法会在共享指针超出它的作用域时自动调用,可用于销毁所含的对象。
例子1:

int main() 
{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值