c++ - new operator for memory allocation on heap -
i looking @ signature of new operator. is:
void* operator new (std::size_t size) throw (std::bad_alloc);
but when use operator, never use cast. i.e
int *arr = new int;
so, how c++ convert pointer of type void*
int*
in case. because, malloc
returns void*
, need explicitly use cast.
there subtle difference in c++ between operator new
, new
operator. (read on again... ordering important!)
the function operator new
c++ analog of c's malloc
function. it's raw memory allocator responsibility solely produce block of memory on construct objects. doesn't invoke constructors, because that's not job. usually, not see operator new
used directly in c++ code; looks bit weird. example:
void* memory = operator new(137); // allocate @ least 137 bytes
the new
operator keyword responsible allocating memory object , invoking constructor. what's encountered commonly in c++ code. when write
int* myint = new int;
you using new operator allocate new integer. internally, new
operator works this:
- allocate memory hold requested object using
operator new
. - invoke object constructor, if any. if throws exception, free above memory
operator delete
, propagate exception. - return pointer newly-constructed object.
because new
operator , operator new
separate, it's possible use new
keyword construct objects without allocating memory. example, famous placement new allows build object @ arbitrary memory address in user-provided memory. example:
t* memory = (t*) malloc(sizeof(t)); // allocate raw buffer new (memory) t(); // construct new t in buffer pointed @ 'memory.'
overloading new
operator defining custom operator new
function lets use new
in way; specify how allocation occurs, , c++ compiler wire new
operator.
in case you're curious, delete
keyword works in same way. there's deallocation function called operator delete
responsible disposing of memory, , delete
operator responsible invoking object destructors , freeing memory. however, operator new
, operator delete
can used outside of these contexts in place of c's malloc
, free
, example.
Comments
Post a Comment