そのため、C++ の文字列リテラルがどのように機能するかをよりよく理解したいと考えています。私は主に、文字列リテラルのアドレスをポインターに割り当てて渡している状況に関心があります。例えば:
char* advice = "Don't stick your hands in the toaster.";
ここで、プログラムの実行中にポインターをコピーして、この文字列を渡すだけだとしましょう。確かに、それはおそらく良い考えではありませんが、舞台裏で実際に何が起こっているのか興味があります.
別の例として、文字列リテラルを返す関数を作成するとします。
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
ここで、この関数が非常に頻繁に呼び出され、文字列リテラルが呼び出される時間の約半分しか使用されないとします。
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
最初の状況では、実際に何が起こっているのでしょうか? 文字列は作成されたばかりで使用されておらず、割り当ても解除されていませんか?
2 番目の状況では、ユーザーが文字列を必要とする限り、文字列は保持されますか? もう必要なくなったらどうなりますか...そのとき、そのメモリは解放されますか(そのスペースを指しているものが何もないと仮定します)?
誤解しないでください。このような文字列リテラルを使用するつもりはありません。文字列をチェックするためにコンテナーを使用する予定です (おそらく std::string)。これらの状況がメモリ管理やデータの破損に問題を引き起こす可能性があるかどうかを知りたいだけです。