std::string::c_str() のライフタイムを理解する
プログラミングにおける、const char で動作するレガシー コードとのインターフェイス 変数は、特にアプリケーションが主に std::string オブジェクトを使用する場合に問題が発生する可能性があります。 c_str() を介して std::string インスタンスの基礎となる const char データにアクセスすると、この要件を満たすことができますが、結果の有効期間に関する懸念が生じます。
c_str() を利用する場合は、次のことを理解することが不可欠です。戻り値の持続時間。 c_str() の結果は、その派生元の std::string が破棄された場合、または文字列の非 const 関数が呼び出された場合に無効になります。したがって、c_str() の結果を保存するには、コピーを作成する必要があることがよくあります。
次のコード スニペットを考えてみましょう:
std::string server = "my_server"; std::string name = "my_name"; Foo foo; foo.server = server.c_str(); foo.name = name.c_str(); // We use foo use_foo(foo); // Foo is about to be destroyed, before name and server
この例では、c_str() の結果は限られた範囲内で使用されます。 、対応する std::string オブジェクトはそのまま残ります。その結果、c_str() 値は、このブロックの実行全体を通じて有効であるとみなされます。ただし、ポインター (use_foo() など) またはデストラクター (~Foo()) を通じて呼び出される外部関数は、これらの c_str() 結果の有効性に影響を与える可能性があります。
c_str() 結果を安全に使用するには、元の std::string オブジェクトの有効期間を超えて保存する場合は、通常、別のコピーを作成することをお勧めします。これにより、基礎となるデータが確実に保持され、未定義の動作のリスクが軽減されます。
以上が`std::string::c_str()` ポインタはどのくらいの期間有効ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。