Chinaunix首页 | 论坛 | 博客
  • 博客访问: 623049
  • 博文数量: 116
  • 博客积分: 6078
  • 博客等级: 准将
  • 技术积分: 1214
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 10:09
文章分类

全部博文(116)

文章存档

2016年(1)

2015年(4)

2011年(2)

2010年(21)

2009年(88)

分类: C/C++

2009-08-27 21:05:18

C++ 中需要自己来处理内存,稍微处理不当,就会存在非常郁闷的内存泄漏问题

 

还好,现在 C++ 中推出了强大的智能指针,即 smart_ptr ,本文先稍微介绍一下 smart_ptr ,然后具体说说 shared_ptr weak_ptr ,特别是 enable_shared_from_this shared_from_this

 

除了标准库中的 auto_ptr 之外

boost 或者 tr1 中的 smart_ptr 主要是有下面几种

  • scoped_ptr
  • scoped_array
  • shared_ptr
  • shared_array
  • intrusive_ptr
  • weak_ptr

这些里面最难理解的是综合应用了 weak_ptr shared_ptr enable_shared_from_this 类,在该类中定了成员函数 shared_from_this() ,返回 shared_ptr 。这个函数仅在 shared_ptr 的构造函数被调用之后才能使用。原因是 enable_shared_from_this::weak_ptr 并不在构造函数中设置(此处的构造函数指的是类型 T 的构造函数),而是在 shared_ptr 的构造函数中设置(此处的构造函数指的是类型 shared_ptr 的构造函数)。

 

在下面的代码中:

 

Cpp代码
  1. #include   
  2.   
  3. #include   
  4.   
  5.    
  6.   
  7. #include   
  8.   
  9. #include   
  10.   
  11. #include   
  12.   
  13.    
  14.   
  15. using namespace std;  
  16.   
  17.    
  18.   
  19. struct Ansible  
  20.   
  21.   : public boost::enable_shared_from_this  
  22.   
  23. {  
  24.   
  25.     boost::shared_ptr get_shared()  
  26.   
  27.     {  
  28.   
  29.         boost::shared_ptr r(this);  
  30.   
  31.    
  32.   
  33.         return r;  
  34.   
  35.     }  
  36.   
  37.    
  38.   
  39.     ~Ansible()  
  40.   
  41.     {  
  42.   
  43.         cout<<"Destructor"<
  44.   
  45.     }  
  46.   
  47. };  
  48.   
  49.    
  50.   
  51. int main(int argc,char* argv[])  
  52.   
  53. {  
  54.   
  55.     boost::shared_ptr a(new Ansible);  
  56.   
  57.     Ansible& r = *a;  
  58.   
  59.     //boost::shared_ptr b = r.get_shared();  
  60.   
  61.     boost::shared_ptr b = r.shared_from_this();  
  62.   
  63.    
  64.   
  65.     cout<<"Reference Number "<" "<
  66.   
  67.    
  68.   
  69.     return 0;  
  70.   
  71. }  
阅读(2452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~