C ++析构函数在构造函数外部调用异常

时间:2017-12-05 18:19:11

标签: c++ c++11

我无法在SO上找到答案,或者我不擅长搜索我需要的东西,因为我是C ++的新手。我正在阅读C ++入门,它建议使用shared_ptrs,但我想尝试自己管理内存。

struct A {

 int* x;
 A(): x(new int(5)) {}
 ~A() { delete x; }
 void errorHere() {
   //code...
   throw std::runtime_error("ops");
   //code...
 }

}

由于我有一个指针,我必须处理堆。现在让我们说我运行这段代码:

A test();
try {
 test.errorHere(); //this function throws something, for example std runtime_error
} catch (...) {
  cerr << "error here!";
}

正如您所看到的,errorHere();函数会抛出异常,因此会出现错误,从而中断程序的常规流程。我是肯定在他的方法中发生异常时调用类的析构函数?

换句话说,当在类的方法内部发生异常时我需要释放堆分配的内存。我是在析构函数中进行的,但是当异常发生时会调用它吗?

我在这里看到了数百个答案,如果构造函数中发生异常,则不会调用析构函数,但这不是我的情况。我在一个方法里面! C ++ Primer和google告诉我使用智能指针,我很好,但我想了解这项工作的方式,所以我需要知道这些信息。

0 个答案:

没有答案