条款15在资源管理类中提供对原始资源的访问

从条款13创建一个智能指针:

std::shared_ptr<Investment> pInv(creatInvestment());

假设你希望某个函数处理Investment对象:

int daysHeld(const Investment* pi) 

然后想要这么调用int days = daysHeld(pInv),但是通不过编译,*因为daysHel需要的是Investment 指针,但是传过去的却是一个类型为std::shared_ptr<Investment> 的对象;解决办法有两个:显式转换:get成员函数

int days = daysHeld(pInv.get());

隐式转换:考虑下面用于字体的RAII class

FontHandle getFont();

void  releaseFont(FontHandle fh);

class Font {
	public:
		explicit Font(FontHandle fh) : f(fh) {}
		~Font() {
			releaseFont(f);
		}
	private:
		FontHandle f;		
};

假设有将Font对象转换为FontHandle这样一种需求,一个办法是像get那样提供显式转换

class Font {
	public:
		FontHandle get() const {
			return f;
		}
};

另一个办法就是提供隐式转换函数:

class Font {
	...
	operator FontHandle() const {
		return f;
	}
	...
};

Font f(getFont());
int newFontSize();
changFontSIze(f, newFontSize); // 将Font隐式转化为FontHandle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值