ドキュメントにstd::string::c_str
は次のように書かれています:
「文字列オブジェクトの現在の値を表すヌル文字列 (つまり、C 文字列) を含む配列へのポインターを返します。」
この配列は、c_str の呼び出し時に動的に割り当てられますか? そうでない場合、それはどこから来たのですか?
ドキュメントにstd::string::c_str
は次のように書かれています:
「文字列オブジェクトの現在の値を表すヌル文字列 (つまり、C 文字列) を含む配列へのポインターを返します。」
この配列は、c_str の呼び出し時に動的に割り当てられますか? そうでない場合、それはどこから来たのですか?
C++11 より前では未指定です。string
オブジェクトがそれを管理します。string
C++11 では、オブジェクト データを指します。
C++2003 の場合、これは標準ライブラリの実装次第です。そのための実際のストレージは、ほとんどの場合、 のインスタンスによって管理されますstd::string
。内部バッファを使用する実装もあれば、別の事前割り当てバッファを使用する実装もあります。ただし、これは一定時間のアクセサーであるため、ライブラリの実装で使用できるオプションは限られています。
標準ライブラリの別の実装で顔が平らになる可能性があるため、標準で許可されている範囲外でそのメモリをいじってはいけません。
興味深いことに、C++11 の場合、これはもう少し定義されており、内部バッファーを指し、 のシノニムでなければなりませんstd::string::data
。