当我为 Windows 编写 C 代码时,我应该“默认”使用 SEH 的__try
...__finally
块,还是认为不必要地这样做是不好的做法?
换句话说,下面哪一个(例如)被认为是更好的实践,为什么?
HDC hDCCompat = CreateCompatibleDC(hDC);
__try
{
HBITMAP hBmpCompat = CreateCompatibleBitmap(hDC, ...);
__try
{
SelectObject(hDCCompat, hBmpCompat);
BitBlt(hDC, ..., hDCCompat, ...);
}
__finally { DeleteObject(hBmpCompat); }
}
__finally { DeleteObject(hDCCompat); }
相对
HDC hDCCompat = CreateCompatibleDC(hDC);
HBITMAP hBmpCompat = CreateCompatibleBitmap(hDC, ...);
SelectObject(hDCCompat, hBmpCompat);
BitBlt(hDC, ..., hDCCompat, ...);
DeleteObject(hBmpCompat);
DeleteObject(hDCCompat);
澄清
我忘了提:
我的想法是,如果有人稍后在块中插入更多代码(例如,从函数中提前返回),我的代码仍然会执行清理,而不是过早退出。所以它应该比其他任何东西都更具预防性。我仍然应该避免使用 SEH 吗?