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 |
댓글