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