13.1.14 マッピング・ルール

サーバーレス・オブジェクトは、この項で概説する相違点を除いて、通常のインタフェースと同じ方法でマッピングされます。

サーバーレス・オブジェクト型を表すクラスは、CORBA::Objectのサブクラスではありません。また、必ずしも他のC++クラスのサブクラスではありません。したがって、Object::create_requestなどの操作を必ずしもサポートしません。

サーバーレス・オブジェクト型のTを表す各クラスの場合、次の関数のオーバーロードの各バージョンがCORBAネームスペースで提供されます:

// C++
void release(T_ptr);
Boolean is_nil(T_ptr p);

サブクラスは実装で提供できます。ただし、マッピングされたC++クラスは、ユーザーが容易にサブクラス化できるという保証はありません。実装では、サブクラスに適用されない内部表現やトランスポート形式を想定することは可能です。

サーバーレス・オブジェクト型を表すクラスのメンバー関数は、通常のメモリー管理規則に従うとはかぎりません。これは、CORBA::NVListなどの一部のサーバーレス・オブジェクトが、本質的にほかのサーバーレス・オブジェクトのいくつかのレベルのコンテナでしかない場合があるためです。格納されたサーバーレス・オブジェクトのアクセサ関数から返された値を、呼出し側が明示的に解放しなければならないということは、本来の目的とは反対の使い方になってしまいます。

具体的には、データ型および関数名として使用される例外です。マッピングのその他すべての要素は同一です。

  • サーバーレス・オブジェクトへのリファレンスの型であるT_ptrは、単にT*のtypedefである場合もそうでない場合もあります。
  • マッピングされた各クラスは、次の静的メンバー関数をサポートします:

    // C++
    static T_ptr _duplicate(T_ptr p);
    static T_ptr _nil();
  • _duplicateの有効な実装では、単純に引数を返すか、または新しいインスタンスへのリファレンスを作成します。個別に実装を行うことで、動作の確実性が高くなることがあります。
  • 対応するC++クラスは、直接インスタンス化できる場合とできない場合があります。また、ほかのインスタンス化の制約があってもなくてもかまいません。移植性を考慮して、ユーザーは適切な構成操作を呼び出す必要があります。
  • 通常のインタフェースと同様に、代入演算子はサポートされません。
  • 「リファレンス・スタイル」ではなく「コピー・スタイル」を透過的に採用していますが、特に明記されていないかぎり、パラメータ渡しのシグネチャとルール、およびメモリー管理規則は通常のオブジェクトの場合と同じです。