具体的には、次のような問題が起きています。
class Hoge
{
public:
Hoge(const Hoge&) = delete;
Hoge& operator=(const Hoge&) = delete;
private:
std::vector<int> a; // 大きい
}
class Foo
{
public:
Hoge get_hoge() const {return hoge;}
private:
Hoge hoge;
Hoge2 hoge2; // このFooクラスは他のクラスオブジェクトもいろいろ持っている
}
しかし、これの正しい修正方法が分かりません。
案1)Hogeをコピー可能にする
大きなオブジェクトを持っている場合、コピーは大きなコストになってしまいます。
案2)メンバ変数をpublicにする
一般的にはあまり良くないとされています。
実際、getter/seter には様々なメリットがあると解説されています。
案3)getterをconst参照で返す
これは、簡単に破壊的なコードがかけるため御法度だそうです。
となると、どのように書くべきなのかがわからなくなってしまいました。
どなたかご教授願います。
また、もう1つ質問があるのですが、
Fooのようなクラスのメンバ変数は、
Hoge* hoge;
のようにポインタで持つべきでしょうか。