我有如下程序:
#include <iostream>
#include <stdexcept>
#include <string>
using namespace std;
class MyError : public runtime_error
{
public:
MyError(string mess = "");
~MyError(void);
};
MyError::MyError(string mess) : runtime_error(mess)
{
cout << "MyError::MyError()\n";
}
MyError::~MyError(void)
{
cout << "MyError::~MyError\n";
}
int main(void)
{
try {
throw MyError("hi");
}
catch (MyError& exc) {
cout << exc.what() << endl;
}
cout << "goodbye\n";
return 0;
}
以下哪个会打印出如下结果:
MyError::MyError()
MyError::~MyError
hi
MyError::~MyError
goodbye
为什么异常的析构函数 (~MyError()) 会被调用两次?
我原以为 throw 会创建一个新对象,但我不明白为什么类的析构函数会被调用。
try
块,第二个是复制的异常。 - Richard Critten