gpt4 book ai didi

关于 Stack Unwinding 问题的 Java 和 C++

转载 作者:搜寻专家 更新时间:2023-10-30 21:21:59 25 4
gpt4 key购买 nike

据我所知,如果出现未捕获的异常,C++ 会立即销毁局部变量,Java 会释放引用并将其余部分留给垃圾收集器。

这样对吗? Java 和 C++ 在这个问题上到底有什么区别?换句话说,就堆栈展开问题而言,这两种语言中的哪一种被认为更好? :)

最佳答案

我会因此而受到抨击,但是......

在堆栈展开方面,C++ 无疑比 Java 更好——没有竞争。 C++ 对象析构函数会一直触发返回堆栈,直到到达捕获点——沿途优雅地释放所有托管资源。

正如您所说,Java 将所有这些都留给了非确定性垃圾收集器(最坏的情况)或任何明确制作的 finally block 的手,这些 block 在您的代码中乱丢了(因为 Java 不支持真正的 RAII)。也就是说,所有的资源管理代码都掌握在各个类的客户手中,而不是应该掌握在类设计者手中。

也就是说,在 C++ 中,堆栈展开机制只有在您小心确保析构函数本身不会发出异常时才能正常运行。一旦你有两个活跃的异常,你的程序 abort() 就不会通过 go(当然也不会触发任何剩余的析构函数)。

关于关于 Stack Unwinding 问题的 Java 和 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2551466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com