May 2nd, 2004, 01:23 AM
I've a basic question regarding auto_ptr
auto_ptr<T> pt( new T(1) );
now how do i validate pt before using pt.get()i.e
how can I make sure that pt has been allocated....
is there any way to validate, as iam using this for the first time.Kindly someone clarify
Thanx in advance
May 2nd, 2004, 03:54 AM
Actually, you already answered your own question....'get' will return 0 in case of a failure. Besides that...'new' is supposed to throw a 'bad_alloc' exception in case of a failure...
May 2nd, 2004, 08:26 PM
Adding onto his question, do you know of any lists that basically say what can throw what excepts and when it happens? It would be nice to trap specific errors for debugging.
May 3rd, 2004, 12:49 AM
but I still have a doubt, i.e
in case of normal allocation using new
a = new b;
we can check
if( a!= NULL)
similarly without using get can we check the same in the case of auto_ptr
May 3rd, 2004, 07:57 AM
Firstly... Like Andreas said... new should not return NULL according to the standard. If allocation fails, it should throw a std::bad_alloc exception, and therefore you should not need to check for NULL. (VC++ does however return NULL if allocation fails, because it is not conforming to the standard at that point. If that's your compiler, the check is valid.)
Secondly... Why can't you use get() to check the validity?
// something went wrong!
May 3rd, 2004, 05:37 PM
Just as a quick point in partial answer to one question raised earlier about what exceptions can be thrown: std::auto_ptr has a nothrow guarantee on all its member functions.
the "new" might throw, but the constructor won't.
std::auto_ptr<T> p(new T);
Correct is better than fast. Simple is better than complex. Clear is better than cute. Safe is better than insecure.
-- Sutter and Alexandrescu, C++ Coding Standards
Programs must be written for people to read, and only incidentally for machines to execute.
-- Harold Abelson and Gerald Jay Sussman
The cheapest, fastest and most reliable components of a computer system are those that aren't there.
-- Gordon Bell
Click Here to Expand Forum to Full Width