LayGO C++ Wrapper classes require a compiler which supports C++ runtime exception handling. In some cases, this is an optional feature which must be enabled by using a compiler option. (For instance, the Microsoft Visual C++ compiler supports exception handling, but it must be enabled via the /GX command-line option.) C++ exception handling is required for 2 reasons:
NULL
.
Some C++ compilers may support use of the xalloc
or bad_alloc
exception class for
out of memory conditions. Where this is not the case, the application
should be able to force this type of behavior by defining a handler function and using
_set_new_handler()
as shown in the following example:
#include <new.h> class CNewException { public: CNewException() : size(0) {}; ~CNewException() {}; size_t size; }; static CNewException newException; static int newExceptionHandler ( size_t size ) { newException.size = size; throw &newException; return (0); } int main ( int argc, char ** argv ) { _set_new_handler(newExceptionHandler); try { ... } catch (CNewException * exception) { // Memory allocation failed cerr << "Out of memory: cannot allocate " << exception->size << " bytes" << endl; ... } return (0); }
In this example, if operator new
is unable to allocate the
requested memory, it will call the user supplied function, newExceptionHandler()
.
The function then throws an exception of type CNewException *
.
(Since this is the address of a statically declared CNewException, memory
allocation is not required and the handler will not call itself recursively.)
If an exception occurs inside the try
block, the stack will be
unwound and execution will resume inside the catch
block.