わからないことがあります、教えてください。
以下(クライアント側のコード)に違いはありますか?1) 何とか = (const char *)"ダミー"; 2) 何とか = CORBA::string_dup("ダミー");
...ちょっとグーグルで検索すると、string_dup()がchar *を返すので、2は同等かもしれません。私は考えていました 2) 1 ではなく 2 のディープ コピーを行います。
とにかく今質問を開始しています。簡単に確認してください。
ありがとう!
わからないことがあります、教えてください。
以下(クライアント側のコード)に違いはありますか?1) 何とか = (const char *)"ダミー"; 2) 何とか = CORBA::string_dup("ダミー");
...ちょっとグーグルで検索すると、string_dup()がchar *を返すので、2は同等かもしれません。私は考えていました 2) 1 ではなく 2 のディープ コピーを行います。
とにかく今質問を開始しています。簡単に確認してください。
ありがとう!
const char* blah = "dummy";
C++ コンパイラは、実行可能ファイルのデータ セクションのどこかに、null で終わる文字の定数配列を生成します。blah
それへのポインタを取得します。
char* blah = CORBA::string_dup("dummy");
この関数string_dup()
は、文字の定数配列へのポインターである引数を使用して呼び出されます。string_dup()
次に、フリー ストアからメモリを割り当て、文字列データをフリー ストアに割り当てられたメモリにコピーします。フリーストア メモリへのポインタが呼び出し元に返されます。終了時にメモリを破棄するのは、呼び出し側の仕事CORBA::string_free()
です。技術的には、ORB 実装は特別なフリーストアを使用することが許可されていますが、ほとんどの場合、アプリケーションの残りの部分が使用している標準のヒープ/フリーストアを使用しているだけです。
多くの場合、これを行う方がはるかに優れています。
CORBA::String_var s = CORBA::string_dup("dummy");
のデストラクタは、スコープ外にString_var
なると自動的に呼び出されます。string_free()
s