2011年计算机二级C++辅导实例编程(13)

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  // 这样做的话,如果catch( MyExcepction* pMyExcepction)中不执行delete操作则会发生内存泄露

  // 由catch( MyExcepction* pMyExcepction) 捕获

  MyExcepction * pMyStru = new MyExcepction(120);

  throw pMyStru;

  }

  else

  {

  // 直接创建新对象抛出

  // 相当于创建了临时的对象传递给了catch语句

  // 由catch接收时通过拷贝构造函数再次创建临时对象接收传递过去的对象

  // throw结束后两次创建的临时对象会被析构掉

  throw MyExcepction(throwErrorCode);

  }

  }

  catch( MyExcepction* pMyExcepction)

  {

  // 输出本语句被执行信息

  std::cout << "执行了 catch( MyExcepction* pMyExcepction) " << std::endl;

  // 输出错误信息

  std::cout << "error Code : " << pMyExcepction->getErrorId()<< std::endl;

  // 异常抛出的新对象并非创建在函数栈上,而是创建在专用的异常栈上,不需要进行delete

  //delete pMyExcepction;

  }

  catch ( MyExcepction myExcepction)

  {

  // 输出本语句被执行信息

  std::cout << "执行了 catch ( MyExcepction myExcepction) " << std::endl;

  // 输出错误信息

  std::cout << "error Code : " << myExcepction.getErrorId()<< std::endl;

  }

  catch(...)

  {

  // 输出本语句被执行信息

  std::cout << "执行了 catch(...) " << std::endl;

  // 处理不了,重新抛出给上级

  throw ;

  }

  // 暂停

  int temp;

  std::cin >> temp;

  return 0;

  }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答