2017-04-07 9 views
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へのポインタ?メリットと欠点は何ですか?

+2

あなたが返すものはnullでもかまいませんが、この場合はベクトルですので、実際にはnullにはなりません。const-refを参照してください。 – AlexG

+0

3番目の選択肢は、より良いimhoです。 (getterを呼び出して参照を使用する)関数をコンテナに持ち込むため、ゲッターは必要ありません。カプセル化を参照してください:(wikiから)「そのデータで動作するメソッド(または他の関数)とデータのバンドルを容易にする言語構造」 –

答えて

2

リファレンスがより堅牢です。誤って削除を呼び出すことはできません。

関連する問題