calls made through a callback mechanism). If such calls do exist, and an exception is thrown, the unwinding can cause:
•
•memory leaks when destructors are not executed
•runtime errors when no catch clause is found
Memory Allocation Failure and operator new
In HP aC++ programs, when either operator new ( ) or operator new [ ] cannot obtain a block of storage, a bad_alloc exception results. This is required by the ANSI/ISO C++ International Standard.
In HP C++, memory allocation failures return a null pointer (zero) to the caller of operator new ().
To handle memory allocation failures in HP aC++ and to avoid a program abort, do one of the following:
•Write try or catch clauses to handle the bad_alloc exception.
•Use the nothrow_t parameter to specify the type when calling operator new and check for a null pointer.
Example:
operator new (size_t size, const nothrow_t &) throw(); operator new [] (size_t size, const nothrow_t &) throw();
.
.
.
#include <new.h> #include <stdexcept>
class X{}; |
|
void foo1() { |
|
X* xp1 = new(nothrow())X; | // returns 0 when creating a nothrow |
| // object, if space is not allocated |
} |
|
void foo2() { |
|
X* xp2 = newX: | // may throw bad_alloc |
} |
|
int main() { |
|
try { foo1(); foo2();
}
catch (bad_alloc) {
// code to handle bad_alloc
}
catch(...) {
// code to handle all other exceptions
}
}
Possible Differences when Exiting a Signal Handler
Behavior when exiting a signal handler through a throw may differ between the two compilers.
Migration Considerations when Using Exception Handling 203