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

Re: Sv: Sv: Memory allocators

>Bjarke Hammersholt Roune wrote:
>>Actually, I like throwing an exception better than returning 0, partly
>>because its really, really, really a pain to have to check the return
>>of new all the time, partly because running out of memory is pretty fatal
>>the proper functioning of many or even most functions, so you don't want
>>catch the exception anyway. This is what I see as getting both utility
>>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
>stuff dynamically).
>If the first allocation here fails, everything is fine. But if the second
>one fails we have a memory leak.

This is why using auto_ptr is important if you care about resource leaks
caused by exceptions.
It might be good idea to use the string class rather than c strings

Replace the above with something like :

int SomeFunc(void)
  auto_ptr<char> String1(new char [256]);
  auto_ptr<char> String2(new char [1024]);

 // do some thing

 // auto_ptr goes out of scope so it destroys its contents. -- dont have to
manually delete them

If the first allocation succeeds but the second fails the first allocation
is still deleted when it goes
out of scope.

Peter Burns