#include <iostream>
#include <stdexcept>
class A
{
public:
A(int n) : m_n(n) { std::cout << m_n; }
~A() { std::cout << m_n; }
private:
int m_n;
};
int f(int n)
{
if (1 == n) {
throw std::logic_error("0");
}
A l(n);
return f(n - 1) * n / (n - 1);
}
int main()
{
try {
int r = f(3);
A a(r);
}
catch (const std::exception &e) {
std::cout << e.what() << std::endl;
}
return 0;
}
答案: 32230
1. 出现异常时,会自动抛出,后面所有的语句都不执行,包括递归(其实这也是一种终止递归的方式), 但是该销毁的对象还是会依次销毁。
2. throw std::logic_error("0"); “0”就是 exception.what()的内容