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

看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。

shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_ptr就不能,只能运行一个指针指向一个对象:如果要指针赋值,那么原来的指针要放弃对该对象的所有权。

恩,以后都用shared_ptr。

shared_ptr在最新的c++11中,已经被列入了标准指针,而auto_ptr则出局了。

说了那么多,shared_ptr采用RAII技术,是防止内存泄露的神器。

按bnu_chenshuo的说法,他最后一次看见代码中的内存泄露还是04年他做实习生的时候。

而C++沉思录的作者AndrewKoenig也极力推荐使用标准库,不用指针。

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

[cpp]  view plain  copy
  1. # include <iostream>  
  2. # include <tr1/memory>  
  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<B> ptrB1(new B());  
  29. }  

运行结果:

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


void lock(Mutex* pm);	//锁定互斥器
void unLock(Mutex* pm);	//解除锁定

//本例中当智能指针引用计数为0时,会自动调用删除器	
class Lock
{
public:
	explicit Lock(Mutex* pm)
		:mutexPtr(pm, unLock)		//初始化mutexPtr并且使用unLock()作为删除器
		{
			lock(mutexPtr.get());	//显示转换
		}
private:
	std::trl::shared_ptr<Mutex>mutexPtr; //使用shared_ptr替代传统指针
};



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值