原创:刘树伟
2013-10-16
假设有如下代码:在Func函数一开始,为p申请了10个int空间,在代码执行过程中,如果中间步骤由于某些情况需要提前结束函数,那么需要在结束前释放p。
int Func()
{
int *p = new int[10];
if (true)
{
goto EXIT;
}
if (true)
{
goto EXIT;
}
EXIT:
delete[] p;
return 0;
}
常规的做法是使用goto语句,在需要结束函数时,把代码goto到释放空间的位置。其实我们可以使用while循环更好的解决这一问题:
首先我们先写个只能单次执行的while循环:
while (true)
{
break;
}
然后在其中加入原来的代码:
int Func2()
{
int *p = new int[10];
while (true)
{
if (true)
{
break;
}
if (true)
{
break;
}
break;
}
delete[] p;
return 0;
}
这样是不是更好一些?
或者:
do
{
}while(false);
还有一种替代方案是使用__try/__finally:
HANDLE hRemoteProcess = NULL;
__try
{
hRemoteProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, dwProcessID);
if (hRemoteProcess == NULL)
{
nRet = -2;
__leave;
}
}
__finally
{
if (hRemoteProcess != NULL)
CloseHandle(hRemoteProcess);
}