강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

박정민님의 프로필 이미지
박정민

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

생성자와 소멸자 #2

암시적/명시적 생성자 쓸 때 주의할 점 공유

작성

·

244

0

explicit을 붙였다고 방심할 수 없네요.. type이 다른 암시적/명시적 생성자가 섞여 있을 때 실수할 수 있으니 주의하세요

명암생성자.png

위와 같이 'int형 암시적 타입변환 생성자'와 'float형 명시적 타입변환 생성자'를 만들었습니다.

명암생성자.png

원래 k7 생성 시, Knight k7(1.76f);를 사용해야하지만, 이 코드대로 실행 시 k7과 HelloKnight(8.7f)이 아무 문제 없이 생성/실행됩니다.

이런.png

어셈블리를 까보니 'int형 암시적 생성자'를 생성자로 사용하네요. 컴파일러가 'float형 암시적 생성자'를 찾으려다 못찾으니, 강제로 int로 형변환하여 'int형 암시적 생성자'를 사용한 겁니다.

명시적 생성자를 써야하는데( Knight k7(1.76f) ), 인간의 실수로 인해 예상치 못한 강제 형변환을 경험할 수 있으니 주의하세요~

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

박정민님, C++에서 생성자를 사용할 때의 주의사항에 대해 공유해주셔서 감사합니다. 명시적(explicit) 생성자를 사용함에도 불구하고, 다른 타입의 암시적 타입 변환 생성자와 섞일 때 발생할 수 있는 실수에 대한 경고는 매우 중요한 포인트입니다. 특히, ‘float형 명시적 생성자’와 ‘int형 암시적 생성자’ 사이에서 발생하는 자동 형변환이 개발자의 의도와 다르게 동작할 가능성을 잘 보여줍니다. 이런 경우, 개발자는 타입 변환에 더욱 주의를 기울여야 하며, 명시적 생성자를 사용함으로써 타입 안정성을 확보하는 것이 중요합니다.

또한, 어셈블리 언어를 통해 실제로 어떤 생성자가 호출되는지 확인하는 접근법은 문제의 원인을 깊이 있게 이해하는 데 도움이 됩니다. 이를 통해 컴파일러가 타입을 강제 변환하여 예상치 못한 생성자를 호출하는 문제를 발견할 수 있습니다. 개발자로서는 이런 세부적인 동작 방식을 이해하고 있어야, 더 안정적이고 예측 가능한 코드를 작성할 수 있습니다.

코드의 안정성과 명확성을 위해 명시적 생성자 사용 시 주의를 기울이는 것이 좋으며, 이러한 주의사항을 공유해주셔서 감사합니다. C++ 개발에 있어서 이러한 지식이 더 나은 코드 작성으로 이어지기를 바랍니다.

박정민님의 프로필 이미지
박정민

작성한 질문수

질문하기