不要包装类型,因为会降低可迁移性。应该包装赋值和释放操作,保留原始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;
}
};
其实这个用法不仅可以用于资源的情况,实际上可以用于所有【必须成对进行的操作】的包装。不光可以用于因为异常跳出的情况,实际上可以用于在任何【多出口的函数】中实现对成对操作的包装。