acmilan作者
10年0个月前修改于 9年11个月前IP:四川
827947
1楼

不要包装类型,因为会降低可迁移性。应该包装赋值和释放操作,保留原始C语言类型。

类似地,Win32文件打开操作可以这样包装。

struct Win32FileMgr
{
	HANDLE &f;
	Win32FileMgr(HANDLE &f, LPCTSTR fn, DWORD da, DWORD sm,
		LPSECURITY_ATTRIBUTES sa, DWORD cd, DWORD fa, HANDLE ht) : f(f)
	{
		f = CreateFile(fn, da, sm, sa, cd, fa, ht);
	}
	~Win32FileMgr()
	{
		if (f != NULL && f != INVALID_HANDLE_VALUE) CloseHandle(f);
		f = INVALID_HANDLE_VALUE;
	}
};

其实这个用法不仅可以用于资源的情况,实际上可以用于所有【必须成对进行的操作】的包装。不光可以用于因为异常跳出的情况,实际上可以用于在任何【多出口的函数】中实现对成对操作的包装。

评论
文号 / 827947

千古风流
名片发私信
学术分 4
总主题 466 帖总回复 2942 楼拥有证书:进士 学者 笔友
注册于 2009/05/30 21:22:42最后登录 2019/01/31 17:16:38
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的