【LibUIDK界面库系列文章】goto语句的替代方案



原创:刘树伟

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);
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值