私はC++の文字列でかなり初心者ですので、次のパターンは少し醜いかもしれません。私は大規模なシステムとの統合テストを開始する前に、私が書いたいくつかのコードを見直しています。私が知りたいのは、それが安全かどうか、あるいはメモリを漏らす傾向があるかどうかということです。C++ std :: stringオブジェクトをメモリリークから安全に戻していますか?
string somefunc(void) {
string returnString;
returnString.assign("A string");
return returnString;
}
void anotherfunc(void) {
string myString;
myString.assign(somefunc());
// ...
return;
}
私は理解がReturnStringにの値が新しいオブジェクトのmyStringに割り当てられ、その後、ReturnStringにオブジェクトがsomefuncへの呼び出しを解決するの一環として、破壊されていることです。将来、myStringが範囲外になると、それも破壊されます。
私は通常、somefunc()にmyStringへのポインタを渡してmyStringの値に直接代入しましたが、私のコードで少し明確になるように努力しています。
最初の関数では、おそらく "return string(" A string ");"同じ結果を持っています。 – luiscubal
@luiscubalこれは問題を説明するための簡単な例です。 – Stephen
@luiscubal even return "std :: stringはcの文字列で構成可能であるため、文字列"; "は正常です。 – log0