【发布时间】:2010-03-31 08:35:05
【问题描述】:
据我所知,如果发生未捕获的异常,C++ 会立即销毁局部变量,Java 释放引用并将其余部分留给垃圾收集器。
这是对的吗?在这个问题上,Java 和 C++ 到底有什么区别?换句话说,就堆栈展开问题而言,这两种语言中的哪一种被认为更好? :)
【问题讨论】:
-
主观 - 定义“更好”。
-
Java 实现了一个适当的垃圾收集器,因此理论上,您永远不必担心对象不会破坏它在堆栈上创建的所有内容。 C++ 假设你很小心。
-
Java 实现了一个 memory 垃圾收集器。临时文件不会被垃圾回收,因此可能会因堆栈展开而泄漏。另一方面,在 C++ 堆栈展开调用析构函数,除了内存清理,还可以清理临时文件和其他资源。所以 Java 更简单,C++ 更灵活,这是一个标准的工程权衡。
-
@MSalters:+1 因为它阐明了 C++ 和 Java 在资源处理方面的根本区别。
标签: java c++ stack-unwinding