【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);
}
- 【LibUIDK界面库系列文章】goto语句的替代方案
- 【LibUIDK界面库系列文章】指定ComboBox的高度
- 【LibUIDK界面库系列文章】设置Edit控件的Margin
- 【LibUIDK界面库系列文章】代码风格
- 【LibUIDK界面库系列文章】空闲消息
- 【LibUIDK界面库系列文章】窗口与消息
- 【LibUIDK界面库系列文章】倒序遍历vector
- 【LibUIDK界面库系列文章】制作个性化桌面图标
- 【LibUIDK界面库系列文章】响应默认按钮
- 【LibUIDK界面库系列文章】通过指定模板定制CFontDialog
- 【LibUIDK界面库系列文章】Web Browser控件避免闪烁
- 【LibUIDK界面库系列文章】打开和保存文件对话框
- 【LibUIDK界面库系列文章】MDI菜单机制
- 【LibUIDK界面库系列文章】RC控件语法
- 【LibUIDK界面库系列文章】对话框坐标单位
- 【LibUIDK界面库系列文章】解析网页中的table内容
- 【LibUIDK界面库系列文章】使用双窗口制作阴影边框时的激活问题
- 【LibUIDK界面库系列文章】自绘List control的滚动条
- opencv学习笔记(五)
- hdu 4734 F(x) 数位DP裸
- ssm框架-关联映射
- java基础【4】
- Linux中error while loading shared libraries错误解决办法
- 【LibUIDK界面库系列文章】goto语句的替代方案
- java 笔记(四)
- HDU 2035-人见人爱A^B(乘方取模)
- 最小二乘法理论推导算法
- 函数指针与函数指针数组应用总结
- MFC资源基础实例
- ubuntu16.04 Hadoop安装
- hdu-2604-Queuing
- 世界上最伟大的计算机语言C语言的发展史