e4430.cpp

一時オブジェクトの参照を返すな

/* A:e4430: ローカルテンポラリへの参照を返しています */

修正前 const std::string& quoteString(const std::string& str) { return "'" + str + "'"; /* ←ゴミが返る */ }
修正後 std::string quoteString(const std::string& str) { return "'" + str + "'"; }

解説 一時オブジェクトコピーのオーバーヘッドを減らそうとして ローカルの一時オブジェクトを参照で返しては駄目。 一時オブジェクトのスコープから抜けるので解放後のゴミを返す事になります。 (最近のコンパイラではわざわざ一時オブジェクトの参照を返そうとしなくても 戻り値最適化(RVO)でオーバーヘッドが削減されるものが多い)