11.3.11 自動メモリ管理<interface_name>_varクラス

IDLコンパイラは,example_varという名前のクラスも生成します。このクラスはexample_ptrの代わりに使用できます。example_varクラスは動的に割り当てられたオブジェクトリファレンスに対応するメモリを自動的に管理します。example_varオブジェクトが削除されると,example_ptrに対応するオブジェクトが解放されます。example_varオブジェクトが新しい値を割り当てられると,example_ptrによってポイントされた古いオブジェクトリファレンスは,割り当て後に解放されます。キャスティング演算子も提供されており,これによってexample_varをタイプexample_ptrに割り当てることができます。

コードサンプル11-10 example_c.hh生成ファイルのexample_varクラス(C++)

class example_var : public CORBA::_var {
  . . .
  public:
     static example_ptr _duplicate(example_ptr);
     static void _release(example_ptr);
     example_var();
     example_var(example_ptr);
     example_var(const example_var &);
     ~example_var();
     example_var& operator=(example_ptr);
     example_var& operator=(const example_var& _var)
                             { /* . . . */ }
     operator example* () const { return _ptr; }
     . . .
};

表11-1に,_varクラスのメソッドを説明します。

表11-1 _varクラスのメソッド

メソッド説明
example_var()_ptrをNULLに初期化するコンストラクタ。
example_var (example_ptr ptr)渡された引数に_ptrを初期化したオブジェクトを作成するコンストラクタ。varはデストラクト時に_ptrでrelease()メソッドを起動します。_ptrのリファレンスカウントが0になると,そのオブジェクトは削除されます。
example_var(const example_var& var)パラメタvarとして渡されたオブジェクトのコピーを作成し,_ptrを新しくコピーされたオブジェクトにポイントするコンストラクタ。
~example()_ptrがポイントするオブジェクトで_release()メソッドを一度起動するデストラクタ。
operator=(example_ptr p)_ptrがポイントするオブジェクトで_release()メソッドを起動し,pを_ptrに格納する代入演算子。
operator=(const example_ptr p)_ptrがポイントするオブジェクトで_release()メソッドを起動し,pの_duplicate()メソッドを_ptrに格納する代入演算子。
example_ptr operator->()該当するオブジェクトに格納された_ptrを返します。この演算子は,該当するオブジェクトが正しく初期化されるまで呼び出してはいけません。