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

Sou*_*der 3 c c# c++ java memory-management

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

谈到C时,使用malloc()calloc()realloc()函数分配内存,并使用free()取消分配内存

然而,在像反对面向语言C ++C#Java的,内存是使用动态分配的新的和使用释放删除在的情况下,关键字(运营商)C ++

我的问题是,为什么对于这些​​面向对象的语言,存在用于动态内存分配的运算符而不是函数?即使使用new,最终也像函数一样在分配过程中将指针返回到类对象引用。

这样做仅仅是为了简化语法吗?还是有更深刻的原因?

And*_*eas 5

在C语言中,内存分配功能就是这样。他们分配内存。没有其他的。而且,您必须记住在完成后释放该内存。

在OO语言(C ++,C#,Java等)中,new运算符将分配内存,但也会调用对象构造函数,这是用于初始化对象的特殊方法。

如您所见,这在语义上是完全不同的事情。该new运营商不只是简单的语法,它是从普通的内存分配实际上是不同的。

在C ++中,您仍然必须记住完成后释放该内存。

在C#和Java中,垃圾收集器将为您处理这些问题。