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

来源:互联网 发布:电脑装完系统没有网络 编辑:程序博客网 时间:2024/03/29 08:40


原创:刘树伟

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
原创粉丝点击