Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225115
  • 博文数量: 36
  • 博客积分: 482
  • 博客等级: 下士
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 12:14
个人简介

Hi-ho, Silver! 在一个商业英雄辈出的年代,让我们用技术做一次华丽的冒险。向Linus致敬,向Stallman致敬!

文章分类

全部博文(36)

文章存档

2013年(24)

2012年(1)

2011年(8)

2010年(3)

我的朋友

分类: C/C++

2013-03-04 16:55:11

C++ std::tr1::shared_ptr使用


      看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_ptr就不能,只能运行一个指针指向一个对象:如果要指针赋值,那么原来的指针要放弃对该对象的所有权。

       shared_ptr在最新的c++11中,已经被列入了标准指针,而auto_ptr则出局了。说了那么多,shared_ptr采用RAII技术,是防止内存泄露的神器。按bnu_chenshuo的说法,他最后一次看见代码中的内存泄露还是04年他做实习生的时候。而C++沉思录的作者AndrewKoenig也极力推荐使用标准库,不用指针。

       看下面的程序,我new了一个对象,并没有在程序中使用delete,但是,运行程序,其构造函数仍然运行!这就是shared_ptr,如果要预防内存泄露,它就是最佳选择!

  1. # include   
  2. # include   
  3. using namespace std;  
  4. class A {  
  5. public:  
  6.     A() {  
  7.         cout << "construct A!!!" << endl;  
  8.     }  
  9.     ;  
  10.     ~A() {  
  11.         cout << "destruct A!!!" << endl;  
  12.     }  
  13.     ;  
  14. };  
  15. class B: public A {  
  16. public:  
  17.     B() {  
  18.         cout << "construct B!!!" << endl;  
  19.     }  
  20.     ;  
  21.     ~B() {  
  22.         cout << "destruct B!!!" << endl;  
  23.     }  
  24.     ;  
  25. };  
  26. int main() {  
  27. //  B* ptrB0 = new B();  
  28.     std::tr1::shared_ptr ptrB1(new B());  
  29. }  
运行结果:


construct A!!!
construct B!!!
destruct B!!!
destruct A!!!

转自:http://blog.csdn.net/randyjiawenjie/article/details/6710066

阅读(2644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~