2

そのため、過去数か月間、おそらくそれ以上のコードを生成し、C++文字列ライブラリを使用して文字列を連結しました。そのようです:

template< typename T >
string tostr( const T & val ); // implmented wherever

void somelibraryfunction( const char * );

// begin actual code

somelibraryfunction( ( "foo" + tostr( 5 ) ).c_str( ) );

これはコンパイルされ、正常に動作します。私の懸念は、作成された一時的な文字列が、そのアドレスc_strが取得された後に破棄されることです。私は、最近解放されたがクリアされていないメモリの読み取りに依存しています。何かご意見は?

4

1 に答える 1

6

一時文字列は、ステートメント全体が完了するまで破棄されません。これは、ライブラリ関数が返されるまで破棄されません。関数が後で使用するためにそのアドレスのコピーをどこかに保存しない限り、コードは問題ありません。(文字列の内容のコピーを保存することは問題ありませんchar*。一時的な文字列がなくなると無効になるポインタ値を保存するべきではありません。)

于 2013-02-14T06:42:05.023 に答える