2011-08-04 7 views
2

次のような状況でコピーが作成されたのか、両方の参照が同じオブジェクトを指しているのか不思議です。 constの参照パラメータから初期化された単一のconst参照フィールドを持つクラスを考えてみましょう:refを初期化します。 refでフィールド。パラメータ:コピーは作成されていますか?

class Foo { 
public: 
    Foo(const vector<double>& the_doubles) : my_doubles(the_doubles) {} 
private: 
    const vector<double>& my_doubles; 
} 

だから、my_doublesは、コンストラクタに渡されたのと同じベクトルを指すようになります、またはコピーが作成されますか?

+0

* const *の参照をコンストラクタに渡すときは、一時的に渡さないように十分注意してください。そうしないと、保存された参照はすぐに無効になります。 –

答えて

2

参照は、単に既存の名前(または場合によっては値)の別名を導入するだけです。考えてみましょう:

int a = 42; 
int& b = a; 

baの別名です。我々はさらに

int& c = b; 

を書く場合、cbの別名となりaための順番です。

あなたの状況にも同じことが適用されます。コピーは行われません。

+0

'int&c = b;'と言うなら 'c'は' a'のエイリアスです。 – fredoverflow

1

コンストラクタで渡されたのと同じベクトルを参照します(「ポイント」)。

それ以外の参照メンバーはかなり役に立たないでしょう!

+0

そうでなければ無意味かもしれないと私は思いました! –

+0

この特定のケースでは、参照メンバは実際には役に立たないかもしれません(一時的にバインドされ、コンストラクタでのみ有効です)。極度の注意を払ってのみ使用してください(あなたの管理下にその使用がある内部クラス)? – UncleBens

+0

あなたは質問を誤解しましたか?一時的なものはありません。コンストラクタには参照が渡されます。 –

2

コピーが作成されていません。両方とも同じオブジェクトを指します。

1

参照渡しです。 constである必要があるため、ベクトル内の変数への読み取りアクセスのみが行われます。 ですので、ご連絡はとなります。 my_doublesは、vectorがコンストラクタに渡されたものを参照すると、constとなります。

関連する問題