C++勉強中なのですが、質問です。

文字列(std::stringクラス)を作って返す関数を作る場合
std::string doHoge() {
 std::string str;
 // str に対する処理
 return str;
}
とかやると思われますが、この場合 str は自動的に解放されるんでしょうか?
だとしたら、いつ解放されるんでしょうか?

それとも new でポインタを返して呼び出し側で解放なのかな・・・
作法(というか常識)としては、どっちの方がいいんでしょう