0
私はオブジェクトのベクトルを持つコンテナを持っています。私はC++ - リターンポインタまたはconst参照
- にしたい
class Container { vector<Foo> objects;
は、コンテナがスコープの外に出た後、これらのオブジェクトへのアクセスの問題を無視
- コピーコンストラクタを呼び出し、発信者
- 避けて、これらのオブジェクトへのアクセスのみを読みました(これは決して起こりません)
それに基づいて、私はgeの2つの選択肢があるようです方法。どちらのベクトルにconst参照を返すか、私は、呼び出し元だ場合
const vector<Foo> & getRef() { return objects; }
const vector<Foo> * getPtr() { return &objects; }
はもちろん、私は私が反復するときコピーコンストラクタを呼び出さないようにしてくださいする必要がconstのベクトルへのポインタを返します。だから私は、私はconst参照を返す必要があり、今、この
for (const Foo & f : getRef())
なく
for (Foo f : getRef())
をいただきたいですか?またはconstへのポインタ?メリットと欠点は何ですか?
あなたが返すものはnullでもかまいませんが、この場合はベクトルですので、実際にはnullにはなりません。const-refを参照してください。 – AlexG
3番目の選択肢は、より良いimhoです。 (getterを呼び出して参照を使用する)関数をコンテナに持ち込むため、ゲッターは必要ありません。カプセル化を参照してください:(wikiから)「そのデータで動作するメソッド(または他の関数)とデータのバンドルを容易にする言語構造」 –