Is this code memory leeks free?
char *buffer = (char *) (::operator new(n));
delete buffer;
Does it work any different from "traditional bracket-form" option (when we talk about primitive types):
char *buffer = new char[n];
delete[] buffer;
I guess, there are 3 options:
a) will be freed only 1 byte (n - 1 leaked)
b) will be freed entire allocated block (n bytes)
c) undefined behaviour (implementation depends)
My thoughts:
for primitive type char
only free
is triggered (no destructors are called) and free
knows how many bytes should be freed (which is stored in allocator metainformation). So, this code should be correct.
Added:
Mixing of operator new/delete
and expression new/delete
will lead to undefined behavior. So that's a bad code.
Option using operator delete
is also bad according to http://eel.is/c++draft/expr.delete#2:
char *buffer = (char *) (::operator new(n));
::operator delete(buffer);
So the only variant:
char *buffer = new char[n];
delete[] buffer;