(1)の最大の理由はいちいちfreeすることを考えなくてよいということだと思う。
途中でreturnするような関数で、returnの数だけfreeが書いてあるような醜いコードも結構見かける。
vectorやstringでは、デストラクタでメモリを解放してくれるから、そういうようなコードは起こり得ないということ。
スマートポインタと同じ発想だな。