기본 콘텐츠로 건너뛰기

윈도우에서 오라클19c 설치 중 ins-35180 오류 발생 시 조치 방법

c++ 변환생성자

c++ 코딩하다가 매우 당혹스러운 일을 겪었습니다.

함수 파라미터에 특정 객체가 들어가야 하는데, 그만 실수로 문자열을 넣었습니다.
보통은 컴파일 에러가 발생했겠지만, 이번에는 그렇지 않았습니다.
심지어 정상동작했습니다.
혹시나 해서 이름이 같은 다른 함수가 있는지 확인해보았지만 아니었습니다.

너무 이상해서 디버깅을 해보니, 파라미터로 문자열을 넘기는 순간, 그 문자열을 가지고 해당 객체를 생성하는 것이 아니겠어요?
 
네, 변환생성자 때문에 발생한 소동이었습니다.
사실 해당 객체의 클래스에는 문자열을 파라미터로 받는 생성자가 있었고, 이에 컴파일러가 알아서 객체를 생성한 것이었습니다.

생성자 선언에 explicit 키워드를 추가하면 이와 같은 문제를 예방할 수 있습니다.
(예: explicit MyClass(CString csText);)


참고

댓글

이 블로그의 인기 게시물

프로세스 강제 종료 불가 시.

특정 프로세스를 강제 종료 하려는데... "실행 중인 작업 인스턴스가 없습니다." 이런 메시지가 나타나면서 종료가 안되는 문제가 있었습니다. 작업 관리자에서 "프로세스 종료", "프로세스 트리 종료" 해봐도 안되고, cmd에서 taskkill 해봐도 안되고... 그런데 이게 부모 프로세스를 종료하면 자동으로 종료가 되네요.. (제 경우에는 Visual Studio가 부모 프로세스였습니다. ㅋ) 참고: DEVPIA http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=917792&ref=917791