Sou*_*der 3 c c# c++ java memory-management
我有一个关于动态内存分配的问题。
谈到C时,使用malloc(),calloc()和realloc()函数分配内存,并使用free()取消分配内存。
然而,在像反对面向语言C ++,C#和Java的,内存是使用动态分配的新的和使用释放删除在的情况下,关键字(运营商)C ++。
我的问题是,为什么对于这些面向对象的语言,存在用于动态内存分配的运算符而不是函数?即使使用new,最终也像函数一样在分配过程中将指针返回到类对象引用。
这样做仅仅是为了简化语法吗?还是有更深刻的原因?
在C语言中,内存分配功能就是这样。他们分配内存。没有其他的。而且,您必须记住在完成后释放该内存。
在OO语言(C ++,C#,Java等)中,new运算符将分配内存,但也会调用对象构造函数,这是用于初始化对象的特殊方法。
如您所见,这在语义上是完全不同的事情。该new运营商不只是简单的语法,它是从普通的内存分配实际上是不同的。
在C ++中,您仍然必须记住完成后释放该内存。
在C#和Java中,垃圾收集器将为您处理这些问题。