c++ 변환생성자
c++ 코딩하다가 매우 당혹스러운 일을 겪었습니다.
함수 파라미터에 특정 객체가 들어가야 하는데, 그만 실수로 문자열을 넣었습니다.
보통은 컴파일 에러가 발생했겠지만, 이번에는 그렇지 않았습니다.
심지어 정상동작했습니다.
혹시나 해서 이름이 같은 다른 함수가 있는지 확인해보았지만 아니었습니다.
너무 이상해서 디버깅을 해보니, 파라미터로 문자열을 넘기는 순간, 그 문자열을 가지고 해당 객체를 생성하는 것이 아니겠어요?
네, 변환생성자 때문에 발생한 소동이었습니다.
사실 해당 객체의 클래스에는 문자열을 파라미터로 받는 생성자가 있었고, 이에 컴파일러가 알아서 객체를 생성한 것이었습니다.
생성자 선언에 explicit 키워드를 추가하면 이와 같은 문제를 예방할 수 있습니다.
(예: explicit MyClass(CString csText);)
참고
함수 파라미터에 특정 객체가 들어가야 하는데, 그만 실수로 문자열을 넣었습니다.
보통은 컴파일 에러가 발생했겠지만, 이번에는 그렇지 않았습니다.
심지어 정상동작했습니다.
혹시나 해서 이름이 같은 다른 함수가 있는지 확인해보았지만 아니었습니다.
너무 이상해서 디버깅을 해보니, 파라미터로 문자열을 넘기는 순간, 그 문자열을 가지고 해당 객체를 생성하는 것이 아니겠어요?
네, 변환생성자 때문에 발생한 소동이었습니다.
사실 해당 객체의 클래스에는 문자열을 파라미터로 받는 생성자가 있었고, 이에 컴파일러가 알아서 객체를 생성한 것이었습니다.
생성자 선언에 explicit 키워드를 추가하면 이와 같은 문제를 예방할 수 있습니다.
(예: explicit MyClass(CString csText);)
참고
댓글
댓글 쓰기