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.
On Jul 12, 3:36 pm, "Alf P. Steinbach" <a...@start.now rote:
* 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@gma il.com
Conseils en informatique orientée objet/
Beratung in objektorientier ter Datenverarbeitu ng
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Jul 12, 4:21 pm, "Alf P. Steinbach" <a...@start.now rote:
* Juha Nieminen:
Alf P. Steinbach wrote:
It either hangs, crashes or throws a std::bad_alloc exception.
I thought it returns 0.
No, the ordinary new expression doesn't.
That was pre-standard behavior, which means, before 1998, ten years ago.
You mean pre-standard, like having to put the implementation of
your templates in a header file, rather than just declaring them
"export"?
(In fact, I think that most modern compilers do try to do the
right thing here. And succeed, when the OS doesn't screw things
up.)
--
James Kanze (Gabi Software) email: james.kanze@gma il.com
Conseils en informatique orientée objet/
Beratung in objektorientier ter Datenverarbeitu ng
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Comment