为什么Java和C#不允许在堆栈上创建对象?

时间:2015-01-29 06:26:17

标签: java c# c++ computer-science

为什么我可以用C ++在堆栈上创建一个对象,但我不能用其他编程语言(如Java或C#)来做这些?

2 个答案:

答案 0 :(得分:0)

原因很简单:在C ++中,你必须自己管理所有这些内存分配。分配对象的位置,何时释放。

在Java和C#(实际上是.NET)中,这要容易得多。对象在堆上分配,并在不再需要时收集垃圾。这消除了一系列问题(内存泄漏和访问释放的对象)

答案 1 :(得分:0)

我不知道我的答案是否能解释为什么语言设计师会像他们那样做,但鉴于我做了很多C ++和Java编程,我的回答是:" 因为没有必要"。

在Java中,我不关心在哪里创建对象。

"堆上对象的主要区别"和#34;堆栈上的对象"在C ++中,在后一种情况下,对象在超出范围时会自动销毁。在Java中,即使对象是在堆上创建的,也是如此,因为Java有一个垃圾收集器并检查引用是否超出范围" (从某种意义上说,程序中没有任何部分持有对象的引用)。

所以在Java中,对象是在堆上创建的,但是从那个" C ++"它们的行为就像在堆栈上创建一样。

PS:可能还有另外一个方面:在C ++中,堆栈大小是/可以被限制(远远超过堆大小),因此在堆栈上创建大量对象可能是个问题。