java - 跨编程语言的动态内存分配

标签 java c# c++ c memory-management

我有一个关于动态内存分配的问题。

对于 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/

相关文章:

Java : recursive constructor call and stackoverflow error

c# - 反向波兰表示法 : Ignoring parentheses and spaces in input formula

c# - 我无法让页面从 cookie 加载用户角色

c++ - 跟进英语语法分析器

java - Android 模拟器运行不正常

java - 数组中的 For 循环 (Java) 索引越界

java - 使用 Spring Boot 从 Elastic Search 查询结果中返回 List<Student>

c# - ASP.Net identity slidingexpiration 设置为true 不重发cookie

C++ 版本高亮显示

C++ 头文件 - 包含什么