|

When
your program allocates memory on the free store,
a pointer is returned. It is imperative that you
keep a pointer to that memory, because once the
pointer is lost, the memory cannot be deleted and
becomes a memory leak.
As
you pass this block of memory between functions,
someone will "own" the pointer. Typically the value
in the block will be passed using references, and
the function that created the memory is the one
that deletes it. But this is a general rule, not
an ironclad one.
It
is dangerous for one function to create memory and
another to free it, however. Ambiguity about who
owns the pointer can lead to one of two problems:
forgetting to delete a pointer or deleting it twice.
Either one can cause serious problems in your program.
It is safer to build your functions so that they
delete the memory they create.
If
you are writing a function that needs to create
memory and then pass it back to the calling function,
consider changing your interface. Have the calling
function allocate the memory and then pass it into
your function by reference. This moves all memory
management out of your program and back to the function
that is prepared to delete it.
DO
pass parameters by value when you must. DO
return by value when you must. DON’T pass
by reference if the item referred to may go out
of scope. DON’T use references to null objects.
|