[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sv: Sv: Memory allocators

Bjarke Hammersholt Roune wrote:

>>(3) Override operator new with a custom one returning 0 on failure
>>I don't like any of these possibilities :(
>Actually, I like throwing an exception better than returning 0, partly
>because its really, really, really a pain to have to check the return value
>of new all the time, partly because running out of memory is pretty fatal to
>the proper functioning of many or even most functions, so you don't want to
>catch the exception anyway. This is what I see as getting both utility and
>functionality "for free".

In theory this is right, but in a function like this one:

int SomeFunc (void)
  char *String1 = new [256];
  char *String2 = new [1024];

  // do something

  delete[] String1;
  delete[] String2;

(just a silly example. Imagine a function that really needs to allocate the
stuff dynamically).
If the first allocation here fails, everything is fine. But if the second
one fails we have a memory leak.
So you have to check for errors in many cases. The problem is even greater
if the function calls another allocating function instead of the second
allocation - in such a case ommitting the neccessary check is all too easy.

So I check every allocation for failures - and in this case checking for a
zero return value is simpler than catching bad_alloc.

>Nomatter what is decided, getting everything to function uniformly is not
>harder than calling _set_new_handler() with our own handler that does what
>we want it to do.

But then problems arise when the user uses PPlay code together with another
library which also sets its custom _new_handler ().


Drive A: not responding...Formatting C: instead