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...
Ciao, Andreas
"Software is like sex, it's better when it's free." - Linus Torvalds
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.
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?
Code:
if(!your_auto_ptr.get())
{
// 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.
So
Code:
std::auto_ptr<T> p(new T);
the "new" might throw, but the constructor won'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
Bookmarks