私はその必要がないため、静的データを使用してお勧めしません。
メモリの使用をデバッグするには、すべてのソースファイルを-DDEBUG
でコンパイルします。アプリケーションを実行すると次の3つのファイルが表示されます。
SENT.log
メッセージが
RECV.log
メッセージが
TEST.log
TEST.log
は、メッセージングの問題をチェックするのに便利ですデバッグログを受けた送ら。
実行時に生成される他の貴重な情報は、メモリリークやヒープメモリに関連するエラーメッセージで、コード内で破損している(オーバーランなど)ものです。これらはgSOAPエンジンでは起こりそうにないものの、より良い点検が行われます。
管理するデータの適切な割り当てと解放を確保するために:
soap_destroy(soap);
soap_end(soap);
私が管理するデータを割り当てるために自動生成機能を使用しています:
SomeClass *obj = soap_new_SomeClass(soap);
と散発的に生管理割り当てにsoap_malloc
を使用し、またはポインタの配列、またはC文字列を割り当てることができます。
const char *s = soap_malloc(soap, 100);
より良いとの文字列を割り当てることである。
std::string *s = soap_new_std__string(soap);
及びアレイは、例えば、第二パラメータで割り当てることができます10個の文字列の配列:
std::string *s = soap_new_std__string(soap, 10);
すべての管理対象割り当てはsoap_end()
続いsoap_destroy()
で削除されます。その後、再度割り当てを開始し、再び削除することができ、など
あなたがそうでなければ、これらの呼び出しで削除されるデータを保存したい場合は、使用:今すぐ
soap_unlink(soap, obj);
obj
はdelete obj
と後で削除することができます。ただし、soap_destroy()
とsoap_end()
の後に、管理対象データを指すobj
のすべてのポインタメンバーが無効になっていることに注意してください。したがって、これらのメンバーでsoap_unlink()
を起動するか、ポインタがぶら下がる危険があります。
SomeClass *otherobj = soap_dup_SomeClass(NULL, obj);
これは、アンマネージドヒープ領域にobj
を複製:
のgSOAPの新しいクールな機能は、深いコピーを生成し、コーディング時間の膨大な量を保存し、自動的に任意のデータ構造のための機能を削除することです。これは、オブジェクトグラフのサイクルをチェックし、そのようなサイクルを削除して削除の問題を回避するディープコピーです。 soap_dup_SomeClass
の最初の引数にNULLの代わりにsoap
を使用して、(循環)管理対象オブジェクト全体を別のコンテキストに複製することもできます。深い削除するには、
:
soap_del_SomeClass(obj);
これはobj
を削除だけでなく、データがそうで、そのメンバーで指され、。
soap_dup_X
とsoap_del_X
関数を使用するには、soapcpp2をそれぞれオプション-Ec
と-Ed
で使用します。
原則として、静的およびスタック割り当てデータは、同様にシリアライズできます。しかし、管理されたヒープを代わりに使用することを検討してください。
これが役に立ちます。