Web サービス・クライアント・アプリケーションを作成するときに従う必要のあるメモリー管理に関連した規則がいくつかあります。
- ポインターとして Web サービス・メソッドに渡されるオブジェクトまたは Web サービス・メソッドから取得されるオブジェクトの責任は、クライアント・アプリケーションにあります。
- クラスとして定義されたオブジェクトは、そのオブジェクトが含んでいるオブジェクトを隠しますが、その代わりに、オブジェクトの内容を操作する get メソッドおよび set メソッドを持っています。
- クラスであり、入力として使用されるオブジェクトでは、不要になったとき、クライアント・アプリケーションにこのオブジェクトを削除する責任があります。
- クラスであり、出力として使用されるオブジェクトでは、不要になったとき、クライアント・アプリケーションにこのオブジェクトを削除する責任があります。「get」メソッドの呼び出しから戻されたオブジェクトは、親オブジェクトの削除時に親オブジェクトが削除するため、このようなオブジェクトを削除することはできません。
- スタブが「新規作成」される場合 (スタック・オブジェクトであるのではなく) は、このスタブを削除する必要があります。
- 戻りパラメーターが以下のいずれかである場合、削除する必要があります。
- 複合型
- 配列
- ストリング・ベースの型規則 7
- Nillable
- オプション
- ストリング・ベースの型を削除する場合は、delete [] string; を使用します。
ストリング・ベースの型には、xsd__string、xsd__normalizedString、xsd__token、xsd__language、
xsd__Name、xsd__NCName、xsd__ID、xsd__IDREF、xsd__IDREFS、
xsd__ENTITY、xsd__ENTITIES、xsd__NMTOKEN、xsd__NMTOKENS、
xsd__anyURI、xsd__QName、および xsd__NOTATION があります。
- xsd__hexBinary
および xsd__base64Binary での「set(xsd__unsignedByte * data, xsd__int size)」メソッドは、データのコピーを取ります。元のデータを削除することを忘れないでください。
- xsd__hexBinary および xsd__base64Binary で「xsd__unsignedByte * get(xsd__int & size) const」メソッドを使用する場合、戻されるポインターは xsd__base64Binary または xsd__hexBinary オブジェクトのデストラクターによって削除されるため、このポインターは削除しないでください。
- 複合型のメンバーを設定すると、対応する set メソッドが、元のデータのディープ・コピーを取ります。元のデータを削除することを忘れないでください。
- 複合型のメンバーの直接設定 (すなわち、対応する set メソッドは使用しないこと) はサポートされておらず、不明の副次作用が発生することがあります。
- 配列 (Axis_Array およびそれから派生したもの - xsd__<built-in
simple type>_Array または <generated type>_Array) を初期化する場合に、set() メソッドを使用すると、データのディープ・コピーが取られます。元の配列エレメントおよび元の c スタイルのポインター配列を削除することを忘れないでください。