インスタンスが確保されてる状態なら、参照を返せばいい。
class Foo {
 Pos pos_;
public:
 Pos& GetPos() { return pos_; }
 const Pos& GetPos() const { return pos_; }
};

スコープの外側にインスタンスを返すなら、参照渡しじゃ無理なので、コンパイラの
NRVOに期待して、例えば以下のように書くことになる。
inline Pos GetPos() {
 Pos result;
/* code */
 return result;
}

NRVO非対応でRVOだけ対応のコンパイラだと、
inline Pos GetPos() {
/* code */
 return Pos( /* code */ );
}
こういうコードじゃないと>>741の言うような最適化は掛からない。
コンパイラーメーカーもC++標準化委員会もNRVOが掛かるように頑張ってるはずだが、
実装状況はコンパイラによってまちまちなんで調べてくれ。多分検索すればすぐ分かる。
VC++なら2005からNRVO行けるっぽい。/O1くらいでもNRVOは掛かる模様。
プロファイラで後から最適化ってのも常道だけど、I/F設計段階の話はそうもいかないし
なぁ。
まぁ、俺なら基本的には参照渡し、リターンで解体される自動変数なら値渡しで返して、
後者がボトルネックになるならインライン化でたぶんNRVO発動でおk、って書く。で、
「この設計だと遅そうだしポインタ渡そう」って言われたら、実際どうなるか興味ある
んでベンチでも書いたり、ついでに↓みたいなのも一緒に見たりしながら相談する。
http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx