2012-08-10 4 views
3
내가 예를 들어 같은 값으로 그 클래스의 객체를 사용하는 생성자가있는 클래스를 만들려고하고

는 :C++ "잘못된 생성자는"

class X{ 
    X(){} 
    X(X x){} //Error! 
}; 

다음 g ++는 두 번째 생성자에 대해 다음을 불평 :

error: invalid constructor; you probably meant ‘X (const X&)’ 

안녕하세요, 저는 const 참조를 의미하지 않았습니다. 이번에는 매개 변수 x를 값으로 전달하기 위해 내가 작성한 것을하고 싶었습니다! 왜 이것이 유효하지 않습니까?

+0

어떻게 그러한 생성자를 호출하겠습니까? –

답변

13

복사 생성자를 만들고 복사 생성자가 참조를 가져와야합니다. 그렇지 않으면 x를 값에 의해 생성자에 전달할 때 컴파일러는 임시 복사본을 생성해야하는 복사 생성자를 호출해야하는 x의 임시 복사본을 만들어야합니다. 광고 infinium.

따라서 복사 생성자는 무한 재귀를 방지하기 위해 참조로 인수를 가져야합니다.

5

X(X x){} //Error! 

는 복사 생성자를 필요로하기 때문에. 즉 재귀 적이다. 언제 끝나는거야?

0

복사하려는 개체에 대한 참조 만 전달하여 복사 생성자를 구현하려고합니다.