一般的なアプローチの 1 つは、sysInit.m、sysRefresh.m など、パブリック インターフェイスを提供する複数の m ファイル関数を用意することです。
これらの各 m ファイルは、何らかの種類のハンドル、呼び出す関数を識別する文字列 (または数値)、および追加の引数を使用して関数 mex を呼び出します。たとえば、sysRefresh.m は次のようになります。
function sysRefresh(handle)
return sysMex(handle, 'refresh')
sysMex mex 関数では、ハンドルを生のヒープ ポインターにするか (簡単ですが、あまり安全ではありません)、ハンドル ID から実際のオブジェクト ポインターへのマッピングを C/C++ で維持することができます。このソリューションには少し余分な作業が必要ですが、はるかに安全です。このようにして、誰かが誤って任意の数値をハンドルとして渡すことができなくなります。これは、ダングリング ポインターとして機能します。また、mex 関数をアンロードするときに onCleanup 関数を使用してすべてのメモリとリソースを解放するなど、より手の込んだことを行うこともできます (たとえば、mex 関数を再コンパイルするときに matlab を再起動する必要はありません)。
必要に応じて、Matlab クラスの背後にあるハンドルを非表示にすることができます。興味がある場合は、ドキュメントで Matlab の OO 機能を読んでください。最近のバージョンを使用している場合は、よりクリーンなハンドル オブジェクトを利用できます。