ゲッター/セッターを実装する必要があると仮定します (また、設計が悪いことを示すことが多いため、可能な限り避けるようにしています)。次の 2 つのバリアントはどちらが優れていますか?また、それぞれの意味は何ですか?
可能性 (1):
class Foo;
class Bar
{
public:
const Foo& getFoo() const {return foo_;}
private:
Foo foo_;
};
または (2):
class Foo;
class Bar
{
public:
void getFoo(Foo& foo) const {foo = foo_}
private:
Foo foo_;
};
個人的には、より直感的なので、常に最初のバリアントを使用します。2 番目のバリアントでは、getFoo を呼び出す前に getFoo の結果を保持する Foo オブジェクトを作成し、getFoo にこのオブジェクトへの参照を渡す必要があります。このバリアントは直感に反するように感じますが、2 番目のバリアントを好む人もいます。2 番目のバリアントが最初のバリアントよりも優れている理由は何ですか?