尝试捕获块创建对象

时间:2014-02-22 02:33:07

标签: c++

因此,对于我正在学习的课程,我们正在练习重载操作符,但更具体地说,我们正在设计一个分数类(有理数)。我正在玩try-catch块,似乎无法让它像我想要的那样工作,也无法找到任何关于我无法弄清楚的论坛或文章。我试图在try-catch块中创建有理数字对象,以确保放入分母的值不是'0',如果是,我让catch块调用对象的解构函数。我得到了这一点工作得很好但似乎我没有办法在代码中稍后使用try-catch块中创建的对象,即使构造函数成功地为分母分配了非零值。有没有办法在try-catch块中声明一个对象,以验证它不会在其创建中抛出异常但仍然在try-catch块之外的其余代码的范围内,但仍然在相同的功能还是没有办法把它拉下来?

1 个答案:

答案 0 :(得分:2)

try引入了新范围。您不能在try之外使用成功构造的对象,因为它们已超出范围并已被破坏。这适用于在任何块中创建的对象,例如forif,或任何{ }大括号。您要做的是将依赖于对象的代码移动到try

例如:

try {
  Rat rat1(3, 1);
  Rat rat2(2, 4);
  Rat rat3 = rat1 + rat2;
  std::cout << rat3 << std::endl;
}
catch (std::exception& e) {
  // above should not throw
}

try {
  Rat rat1(3, 1);
  Rat rat2(2, 0);  // throws
  Rat rat3 = rat1 + rat2;
  std::cout << rat3 << std::endl;
}
catch (std::exception& e) {
  // code here will execute
}