Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第5章 アプリケーションの開発(C++言語) | > 5.5 データ型に対するマッピング |
可変長データは、データをクライアントへ返却後、スケルトン中で自動的に解放します。
そのため、解放したくないデータについては、そのデータをどこか別の領域に複写しておく必要があります。文字列(string)を例に説明します。
しかし、any、sequenceのような複雑な型の場合には、コピーする処理が複雑なため、リリースフラグを設定し、解放する/しないを設定できるようになっています。
リリースフラグの設定方法について以下に示します。
変数型 |
設定方法 |
any |
コンストラクタまたはreplaceメソッドを使用。デフォルトはCORBA_FALSE (注) 例) CORBA::Any_ptr p = new CORBA::Any(_typecode, value, CORBA_TRUE); CORBA::Any_ptr p = new CORBA::Any; p->replace( _typecode, value, CORBA_TRUE ); |
sequence |
コンストラクタを使用。デフォルトはCORBA_FALSE (注) 例) struct sample { string para1; long para2; }; typedef sequence<sample> data; −> sample_var *p = sample::allocbuf(2); data *q = new data( 2, 2, p, CORBA_TRUE ); (2,2はそれぞれmaximum, length) |
注) CORBA_TRUEのとき解放されます。CORBA_FALSEのときは解放されません。
any型が基本データ型(CORBA::Octet, CORBA::Char, CORBA::Long等)のデータ領域を保持している場合は、リリースフラグの設定にかかわらず、データ領域の解放を行いません。以下の例に示すように、データ領域が必要なくなった時点で、明示的に開放してください。
CORBA::Long *ptr = new CORBA::Long[10]; // データ領域の獲得 for( int i = 0; i < 10; i++ ) ptr[i] = i; // 値の設定 CORBA::Any *p = new CORBA::Any(_tc_long, ptr, CORBA_FALSE); // リリースフラグをCORBA_FALSEに設定 // 領域の解放 delete p; // any型の解放 delete ptr; // データ領域の解放
目次
索引
![]() ![]() |