Skip to Main Content Skip to Search
Home |   Select Country  Choose Country  |  Contact Us  |  Cart Store 
Create Account | Log In
Products & Services Solutions Academia Support User Community Company
spacer spacer spacer spacer spacer spacer

Technical Solutions

Why does my class destructor not execute after an error occurs in a C++ MEX-file in MATLAB?


Date Last Modified: Friday, June 26, 2009
Solution ID:   1-4OKNSV
Product:   MATLAB
Reported in Release:   No Release
Platform:   All Platforms
Operating System:   All OS
 

Subject:

Why does my class destructor not execute after an error occurs in a C++ MEX-file in MATLAB?

Problem Description:

I have created a C++ MEX-function. In the MEX-function, I create instances of a class. This class has a destructor which performs some cleanup. I expect the destructor to be called whenever the class instance goes out of scope. However, when an error occurs in the MEX-function, the destructor does not seem to be called.

Solution:

This is a limitation of several C++ compilers which are supported for creating MEX-functions in MATLAB. The following compilers are known to have this limitation:

On 32-bit Windows:
Visual Studio C++ 6.0
OpenWatcom 1.3 and 1.7

On 64-bit Solaris:
GCC

The destructors are not called because these compilers have exception handling mechanisms which are not compatible with the compilers used to build MATLAB. The symptom of the problem is that class destructors do not get called if an error occurs during a call to a MATLAB API function. They do still get called on normal exit.

Note that all other more recently added compilers (in particular, Microsoft Visual C++ 2008) handle destructors in ways compatible with MATLAB build compilers.

Please provide feedback to help us improve this Solution
Contact support
E-mail this page
Print this page