CORBAでは、クライアント上の可変長データを以下のように扱います。
in,inoutはユーザが明示的に演算子new等を使用して領域を獲得し、データ使用後は、ユーザが演算子delete等を使用してその領域を解放します。
out, 復帰値はスタブ中で領域が獲得されます。データ使用後は、ユーザが演算子delete等を使用してその領域を解放します。
上記解放処理がユーザミスにより行われなかった場合、解放漏れとなって無駄な資源がメモリ中に残ることになります。
CORBAでは、上記解放処理の簡易化のため、varクラスが提供されています。varクラスは、CORBAの可変長データを自動変数化して扱うための機能を提供します。varクラスで提供している主な機能は以下のとおりです。
可変長データのポインタを格納し、デストラクタ中でそのデータを解放します。
格納しているデータのポインタを取り出しデータを変更します。
varクラスは、以下の4とおりあります。
文字列を扱うためのvarクラス
ワイド文字列を扱うためのvarクラス
Any型を扱うためのvarクラス
ユーザ定義により作成されるデータ型に対するvarクラス。シーケンス型、構造体、共用体、配列、各インタフェースにより作成されるObject型。
varクラスの使用イメージを以下に示します。
func() { SampleStruct *data = new SampleStruct; ... // dataに値を設定。 SampleStruct_var var_data var_data = data; // dataのポインタをvar_dataに格納。 ... var_data->para1 = 3; // var_dataに格納されているポインタを取り出し、 // 構造体の要素para1のデータを書き換えます。 ... } // 関数終了時に自動変数var_dataが解放されます。その際、デストラクタが起動され、 // newで獲得したSampleStructの領域も同時に解放されます。