2

わからないことがあります、教えてください。

以下(クライアント側のコード)に違いはありますか?1) 何とか = (const char *)"ダミー"; 2) 何とか = CORBA::string_dup("ダミー");

...ちょっとグーグルで検索すると、string_dup()がchar *を返すので、2は同等かもしれません。私は考えていました 2) 1 ではなく 2 のディープ コピーを行います。

とにかく今質問を開始しています。簡単に確認してください。

ありがとう!

4

1 に答える 1

8
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

于 2013-02-14T13:55:05.353 に答える