SoulRayder SoulRayder - 3 months ago 21
C Question

Dynamic memory allocation across programming languages

I have a question regarding dynamic memory allocation.

When it comes to C, memory is allocated using the functions malloc(), calloc() and realloc() and de-allocated using free().

However in objected oriented languages like C++,C# and Java, memory is dynamically allocated using the new and deallocated using delete keywords (operators) in case of C++.

My question is, why are there operators instead of functions for these objected oriented languages for dynamic memory allocation? Even when using new, finally a pointer is returned to the class object reference during allocation, just like a function.

Is this done only to simplify the syntax? Or is there a more profound reason?

Answer

In C, the memory allocation functions are just that. They allocate memory. Nothing else. And you have to remember to release that memory when done.

In the OO languages (C++, C#, Java, ...), a new operator will allocate memory, but it will also call the object constructor, which is a special method for initializing the object.

As you can see, that is semantically a totally different thing. The new operator is not just simpler syntax, it's actually different from plain memory allocation.

In C++, you still have to remember to release that memory when done.

In C# and Java, that will be handled for you by the Garbage Collector.