Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75040
  • 博文数量: 17
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-08 20:19
文章分类

全部博文(17)

文章存档

2008年(17)

我的朋友

分类: C/C++

2008-04-11 17:53:00

boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr.
这其中,我最喜欢,使用最多的是shared_ptr,也最让人随心所欲.
使用很简单,如下:
头文件 
class A
{
  virtual void process();
}
boost::shared_ptr test(new A);
 
常用的boost::shared_ptr函数有:
get() 获取裸指针
reset() 计数器减一
 
另外,boost::shared_ptr可以方便的和std::vector配合,除了不用担心节点的野指针等问题,还有一个比较有意思的功能。
class B : public A
{
 virtual void process();
 void do();
}
vect.push_back(node);
vect[0]->do(); //可以很方便的访问B::do(),要知道do()并不是A的方法。
boost::shared_ptr有个一个缺点,就是不能从this指针构造。在boost库中,提供了一个解决方案。
#include
class C: public boost::enable_shared_from_this //
{
}
这个情况出现在什么时候呢,如:
class D
{
public:
 void Go(boost::shared_ptr &d);
}
而D的Go方法在C中被使用,这个时候,就需要从this指针构造C的智能指针(boost::shared_from_this()方法提供)。当然,这种方法有一个前提,那就是C在外部的形态也是智能指针。
 
最后,对所有智能指针做一下简单的介绍吧。
auto_ptr 标准库中的智能指针。但是会转移所有权,如a = b时;内嵌的指针转移到b,智能指针a访问内嵌的指针则为空。
scoped_ptr 与auto_ptr类似,但是不允许复制;
intrusive_ptr是shared_ptr侵入式版本。使用情况,内部以及编写好了自己的内部引用计算器的代码,而又没有时间重写它。intrusive_ptr可以从this构造。
weak_ptr是智能指针shared_ptr的观察者。
阅读(5222) | 评论(0) | 转发(0) |
0

上一篇:boost之any

下一篇:[转]网卡的组成工作原理

给主人留下些什么吧!~~