当从类构造函数抛出异常时,程序崩溃。在调试模式下运行时,我收到以下错误“VirtualCtor.exe中0x74A2DB18处的未处理异常:Microsoft C ++异常:[rethrow]在内存位置0x00000000。”它也在发布模式下崩溃。我理解这是因为throw没有找到确切的catch处理程序并且调用了std :: terminate()。但是,我理解catch(...)应该处理这个问题。有人能让我知道我需要使用catch的确切处理程序吗?
#include<iostream>
#include<exception>
using namespace std;
class MyClass
{
public:
MyClass() { cout << "Default Ctor" << endl;
throw; //runtime exception.
}
~MyClass()
{
cout << "Destructor called" << endl;
}
};
int main()
{
MyClass*vpt = nullptr;
try {
vpt = new MyClass;
}
catch (...) {
delete vpt;
cout << "Exception"<< endl;
}
return 0;
}
更改代码抛出bad_alloc();捕获异常并且代码不再崩溃,但我需要了解只是从函数/构造函数调用throw会发生什么?
感谢。
答案 0 :(得分:2)
你不抛出异常。您只需编写throw
,重新抛出已抛出的异常。在这种情况下,没有一个,所以你的程序有不确定的行为。因此崩溃。
如果你想扔东西,你实际上必须抛出一些东西!
MyClass()
{
cout << "Default Ctor" << endl;
throw std::runtime_exception("Testing exception handling");
}