Fey*_*yaz 11 c++ java stack-unwinding
据我所知,在未捕获异常的情况下,C++会立即销毁局部变量,Java会释放引用并将其余部分留给垃圾收集器.
这是正确的吗?Java和C++在这个问题上究竟有什么区别?换句话说,就堆栈展开问题而言,这两种语言中的哪一种被认为更好?:)
Dre*_*all 10
我会为此受到抨击,但......
在堆栈展开前,C++比Java更好 - 没有竞争.C++对象析构函数一直触发堆栈直到达到捕获点 - 沿途释放所有托管资源.
正如你所说的那样,Java将所有这些都置于非确定性垃圾收集器(最坏的情况)或者任何明确制作的最终块的手中,你已经散布了你的代码(因为Java不支持真正的RAII) .也就是说,所有资源管理代码都掌握在每个类的客户手中,而不是应该在类设计者手中.
也就是说,在C++中,如果您小心确保析构函数本身不会发出异常,则堆栈展开机制只能正常运行.一旦你有两个活动的例外,你的程序abort()
没有通过去(当然也没有解雇任何剩余的析构函数).