从构造函数抛出异常时应用程序崩溃

时间:2016-10-09 17:09:59

标签: c++

当从类构造函数抛出异常时,程序崩溃。在调试模式下运行时,我收到以下错误“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会发生什么?

感谢。

1 个答案:

答案 0 :(得分:2)

抛出异常。您只需编写throw重新抛出已抛出的异常。在这种情况下,没有一个,所以你的程序有不确定的行为。因此崩溃。

如果你想扔东西,你实际上必须抛出一些东西!

MyClass()
{
   cout << "Default Ctor" << endl;
   throw std::runtime_exception("Testing exception handling");
}