假设我有这样的课程:
#include <iostream>
using namespace std;
class Boda {
private:
char *ptr;
public:
Boda() {
ptr = new char [20];
}
~Boda() {
cout << "calling ~Boda\n";
delete [] ptr;
}
void ouch() {
throw 99;
}
};
void bad() {
Boda b;
b.ouch();
}
int main() {
bad();
}
似乎析构函数~Boda
永远不会被调用,因此ptr
资源永远不会被释放。
这是程序的输出:
terminate called after throwing an instance of 'int'
Aborted
所以看来我的问题的答案是No
。
但是我认为当抛出异常时堆栈会展开?为什么Boda b
在我的示例中对象没有被破坏?
请帮助我理解这个资源问题。我想在未来写出更好的程序。
还有,这就是所谓的RAII
吗?
谢谢,博达赛多。