我有一个关于动态内存分配的问题。
对于 C,内存是使用函数 malloc()、calloc() 和 realloc() 分配的 并使用 free() 取消分配。
但是在面向对象的语言中,例如 C++、C# 和 Java,内存是使用 new 动态分配的并在 C++ 的情况下使用 delete 关键字(运算符)释放。
我的问题是,为什么这些面向对象的语言使用运算符而不是函数来进行动态内存分配?即使在使用 new 时,最终也会在分配期间返回一个指向类对象引用的指针,只是就像一个函数。
这样做只是为了简化语法吗?还是有更深层次的原因?
最佳答案
在 C 中,内存分配函数就是这样。他们分配内存。没有其他的。而且你必须记得在完成后释放该内存。
在 OO 语言(C++、C#、Java 等)中,new
运算符将分配内存,但它还会调用对象构造函数,它是初始化对象的特殊方法。
如您所见,这在语义上是完全不同的事情。 new
运算符不仅是更简单的语法,它实际上不同于普通的内存分配。
在 C++ 中,您仍然需要记住在完成后释放该内存。
在 C# 和 Java 中,这将由垃圾收集器为您处理。
关于java - 跨编程语言的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38950671/