Re: regarding new operator
On Jul 12, 3:36 pm, "Alf P. Steinbach" <a...@start.no> wrote:
* kris:
I am a beginner to c++ programming. I just want to know what is the
use of new operator.
If there is no sufficient memory to be allocated then what does the
call to this new return.
The common new expression doesn't return in the ordinary way
if there is not sufficient memory for the request.
It either hangs, crashes or throws a std::bad_alloc exception.
And on older implementations, it may also return NULL:-). Note
too that hanging is perfectly standards conformant: the standard
doesn't say how long the request will take:-).
And by crashing, I suspect what you mean is that it will return
an apparently good address which will cause the program to crash
when you use it.
The standard mandates the std::bad_alloc exception, but the exact
behavior depends on the operating system and on the standard library
implementation. You don't need to worry about hangs or crashes, because
you can't do anything about them anyway.
Not from inside the C++ program, anyway. In some cases, you may
be able to reconfigure the system so that it will work,
however---I know that this is the case for Linux (which will
cause a crash by default).
Dealing with std::bad_alloc as an exception can be very
difficult because the system is most likely low on memory,
therefore the recommended way (when it matters) is to avoid
dealing with it by installing a so-called "new handler" that
reports failure and terminates the program instead of throwing
an exception.
Totally agreed. There are probably some exceptions, but they're
exceedingly rare. (I think Andy Koenig once wrote an article,
many years back, explaining why you can't reliably handle out of
memory conditions. In the JOPP, if memory serves me correctly,
but it's long enough ago that I'm far from sure.)
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34