クラスのプライベートなメンバ変数を返すパブリックな関数で

int GetValue() { return a; }

と

const int& GetValue() { return a; }

って同じ事ですか?
肥大化しちゃった(std::vectorとかの)オブジェクトを参照したい時に
下の方が良いかなーとか思ったのですが、実際の所どうなんでしょう?
上のやり方だとオブジェクトの実体をまるごとコピーしてるように思えるんですけど
認識間違っていますか?