我无法在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告诉我使用智能指针,我很好,但我想了解这项工作的方式,所以我需要知道这些信息。