【发布时间】:2017-04-04 07:14:34
【问题描述】:
假设我们有一个像下面这样的类:
class A {
public:
A();
~A();
void foo();
int* pointer;
};
A::A() {
pointer = new int;
}
A::~A() {
delete pointer;
}
A::foo() {
throw "error";
}
以及使用它的以下示例:
示例 1
int main() {
A a;
throw "error";
return 0;
}
示例 2
int main() {
A a;
a.foo();
return 0;
}
在这两种情况下,都会出现内存泄漏,因为 A 的析构函数由于未处理的异常而永远不会被调用。
我的问题是类的用户是否有责任确保通过处理异常来调用析构函数:在第一个示例中,异常与类无关,所以我认为责任在于类的用户,但在第二个例子中,类本身抛出错误 - 是否仍然由类的用户来确保正确处理异常,或者这仅仅是类本身的糟糕设计?
【问题讨论】:
标签: c++ pointers memory-management memory-leaks exception-handling