Effective C++ 学习笔记(十一)

资源管理类是对抗资源泄露的堡垒。排除此等泄露是良好设计系统的根本性质。依赖classes来处理和资源之间的所有互动,而不是玷污双手直接处理原始资源。

使用智能指针如auto_ptr或者tr1::shared_ptr保存factory函数如createInvestment的调用结果。

std::tr1::shared_ptr<Investment> pInv(createInvestment());

假设希望以某个函数处理Investment对象,

int daysHeld(const Investment* pi);   //返回投资天数

int days=daysHeld(pInv);                  //错误!

因为daysHeld需要的是Investment*  指针你传给它的却是类型为tr1::shared_ptr<Investment>对象


tr1::shared_ptr和auto_ptr都提供一个get成员函数,用来执行显式转换,会返回智能指针内部的原始指针(的复件)

int days=daysHeld(pInv.get());               //很好,将pInv内的原始指针传给daysHeld



tr1::shared_ptr和auto_ptr也重载了指针取值操作符(operator->和operator*),允许隐式转换底部原始指针:

class Investment{

   bool  isTaxFree()  const;

};

Investment*  createInvestment();


std::tr1::shared_ptr<Investment>  pil(createInvestment());           //令tr1::shared_ptr管理一笔资源


bool  taxable=!(pil->isTaxFree());                                                  //经由operator->访问资源


std::auto_ptr<Investment>  pi2(createInvestment());                  //令auto_ptr管理一笔资源.


bool  taxable2=!((*pi2).isTaxFree());                                          //经由operator* 访问资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值