2011-08-04 4 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; 

b 지금 a의 별칭입니다. 우리는 또한

int& c = b; 

을 작성하는 경우 다음 cb 별칭 따라서 a에 대한 차례입니다.

상황에 따라 동일하게 적용됩니다. 복사가 이루어지지 않습니다.

+0

'int & c = b;'라고 말하면'c'는 즉시'a'의 별칭이됩니다. – fredoverflow

1

이것은 생성자에서 전달 된 동일한 벡터를 가리 킵니다 ("point").

그렇지 않으면 참조 회원은 꽤 쓸모가 없을 것입니다!

+0

그래, 그렇지 않다면 무의미 할 수도 있다는 생각이 들었다. –

+0

이 특별한 경우에 참조 멤버는 참으로 쓸모가 없을 수도 있습니다 (임시로 바인딩 됨, 생성자에서만 유효 함). 극도의주의 (귀하의 통제하에 사용되는 내부 등급)에서만 사용하십시오. – UncleBens

+0

질문을 잘못 읽었습니까? 내가 볼 수있는 임시가 없습니다. 생성자는 참조를 전달받습니다. –

2

복사본이 없습니다. 두 개체가 같은 개체를 가리 킵니다.

1

참조로 전달 중입니다. const이 필요하기 때문에 벡터의 변수에 대한 읽기 액세스 만 가능합니다. 이므로 참고로 전달 복사가 이루어지지 않습니다. my_doublesvector이 생성자로 전달 된 것에 대한 const 참조가됩니다.

관련 문제