C++복습

C++복습) Modern C++/ Nullptr

PJNull 2021. 12. 22.
728x90
반응형

Nullptr

 

Nullptr은 c++11에서 새로 등장한 문법이다. C++11이전에서 Null포인터는 0또는 NULL이라는 것으로 Null포인터를 표현했었다.

int* ptr=NULL;
int* ptr=0;

//NULL은 #define NULL 0이므로 그냥 0의값이다.

 

Nullptr의 필요성과 0 & Null의 문제점

 

1.오작동 가능성

void Test(int a)
{
	cout<<"1";
}

void Test(void* ptr)
{
	cout<<"2";
}

int main()
{
 Test(0);
 Test(NULL);
}

//출력값은 1,1이다.

이러한 식으로 포인터를 호출하고 싶지만, NULL자체가 0이기때문에 매게변수가 int로 인식되는 문제가 발생한다.

즉, 오동작을 피하기 위해서라도 nullptr을 반드시 사용해야된다.

 

2.가독성

class Mage
{
}

Mage* Find()
{
return nullptr;
}

int main()
{
auto kkk1=Find();
auto kkk2=Find();
if(kkk1==0){return 0;} //kkk2가 정수인지 포인터인지 가독성이 떨어지게됨.
if(kkk2==nullptr){return 0;}//nullptr이므로 포인터를 다루는 변수임을 알수 있음.
}

 

 

 

NullPtr구현

 

const
class
{
public:
	template<typename T>      //어떠한 타입의 포인터와도 치환이 가능하다.
    operator T*() const
    {
      return 0;
    }
    template<typename C,typename T> //어떤한 맴버 포인터와도 치환이 가능하다.
    operator T C::*() const
    {
     return 0;
    }

	void operator&() const=delete;//주소값 추출을 막는다.
}Nullptr;

사실 Nullptr도 0을 반환 해주는 것은 맞으나 다양한 타입/맴버의 포인터와도 치환이 가능한 형태로 되어 있다.

728x90
반응형

'C++복습' 카테고리의 다른 글

C++복습) Modern C++/ enum class  (0) 2021.12.24
C++복습) Modern C++/ Using  (0) 2021.12.22
C++복습) Modern C++/ Auto  (0) 2021.12.22
C++복습) 생성자 맴버 초기화 리스트  (0) 2021.11.22
C++복습) 다형성  (0) 2021.11.21

댓글