정보공간_1

[4기 대구 하호성] nullptr 본문

IT 놀이터/Elite Member Tech & Talk

[4기 대구 하호성] nullptr

알 수 없는 사용자 2013. 12. 5. 22:21

안녕하세요.
대구멤버십 22-1기 하호성입니다.
c++에 있는 nullptr에 대해 알아보려 합니다.

보통 C언어에서 포인터가 아무것도 가르키고 있지 않다는 것을 나타낼 때 NULL이라는 값을 씁니다.
NULL : 포인터가 아무것도 가르키고 있지 않다는 것을 나타내기 위한 값(C언어에서는 0)

 

그런데 NULL은 C++에서 약간의 문제가 있습니다.
 

위 프로그램의 결과가 아래와 같이 나옵니다.


포인터와 같은 개념으로 썼던 NULL이 함수 오버로딩에서 int와 같은 정수로 인식돼 함수를 콜하게 됩니다.
그 이유는 NULL이 다음과 같이 전처리기에 의해 0으로 치환되기 때문입니다.

위 문제를 해결하기 위해 nullptr이 나오게 되었습니다.
c++의 연산자 재정의중에 변환 연산자를 재정의 합니다.
이 때 포인터 자료형을 모두 변환하기 위해 템플릿을 이용합니다.

 
위와 같이 클래스를 선언하고 mynullptr을 사용하게 되면 아까 예제의 문제를
해결할 수 있습니다.



결과화면

 

하지만 아직까지 문제가 더 남아있습니다.

위와 같이 클래스 멤버 변수에 대한 포인터는 방금 만든 nullptr로는 해결이 되지 않습니다.

그래서 다음과 같이 클래스 멤버 변수에 대한 포인터 변환 연산자를 재정의 합니다.


소스코드
 

실행화면



마지막으로 상수 클래스로 선언하고
&연산자를 막으면 아래와 같이 완성됩니다.


위의 모습이 c++에 있는 nullptr의 모습입니다.

NULL보다 nullptr을 사용하는 것이 문제를 미연에 방지할 수 있습니다.