从高效编程中学到——再次研读高效编程

本文通过具体案例探讨了项目中异常处理的重要性,并提供了改进措施,强调了规范性和测试的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       经过前段时间的工作,现在有些时间能够回顾一下我们以前的代码和相关知识。目前,再次拿起高效编程这本经典之作,对比这个项目的代码,发现一些不足。现在下面慢慢解析:

一、异常退出代码的控制问题

      在这次项目中,发现我们在工作中对异常退出的代码控制不是很严。个人认为主要原因有:

      1、个人认识不足而导致规范不够。像我这样的新手,往往由于某些编程习惯而忘记了进行相关的控制。

      2、这些异常退出的代码很难被测试到,个人认为我们控制不严的很重要的原因。由于没有测试出相关错误所以我们就没有机会对其进行改正。同样,在下次编写相关代码时也很难引起思想上的重视。

      下面就我们项目中的代码举一些相关例子:

     错误代码:

   CQuestionEnumerateDialog* dialog = new (ELeave) CQuestionEnumerateDialog(
     aQueSetItem->iQuestionId,aQueSetItem->iEnumSelect);
   dialog->SetParent(this);
   dialog->LoadQuestionFromXML();
   dialog->ExecuteLD(R_PAPER_QUESTION_ENUMERATE_DIALOG);

   这段代码没有在可能发生退出的函数之间加入到清除栈中,修改后的代码应如下:

   CQuestionEnumerateDialog* dialog = new (ELeave) CQuestionEnumerateDialog(
     aQueSetItem->iQuestionId,aQueSetItem->iEnumSelect);
   CleanupStack::PushL(dialog);
   dialog->SetParent(this);
   dialog->LoadQuestionFromXML();
   CleanupStack::Pop();
   dialog->ExecuteLD(R_PAPER_QUESTION_ENUMERATE_DIALOG);

   错误代码:

void CSystemView::DoDeactivate()
{
  if (iContainer)
  {
    iContainer->SaveSettingValuesL();
    AppUi()->RemoveFromStack(iContainer);
  }
  delete iContainer;
  iContainer = NULL;
}

由于在视图的DoDeactivate方法中不允许在异常退出,否则会造成程序崩溃。个人认为最直接的方法就是:

void CSystemView::DoDeactivate()
{
  if (iContainer)
  {
    TRAPD(err,iContainer->SaveSettingValuesL());
    AppUi()->RemoveFromStack(iContainer);
  }
  delete iContainer;
  iContainer = NULL;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值