假设我有这样一个类:
#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
看起来我的问题的答案是不是
。
但我认为当异常被抛出时,栈会被展开?为什么在我的示例中Boda b
对象没有被销毁?
请帮助我理解这个资源问题。我想将来写出更好的程序。
那么,这就是所谓的RAII
吗?
谢谢,Boda Cydo。
init_library_x
和init_library_y
这些 C 语言库,那该怎么办呢?那么我就必须保持lib_x_inited
和lib_y_inited
标志,对吧?在使用 C 代码库时似乎存在这种模式,所以您能否对“你不常编写这样的类”发表一些评论? - bodacydo