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
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...
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.
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
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!
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);