nullptr의 의미와 사용 이유
class Test
{
public:
Test(int a) { }
Test(void* ptr) { }
Knight* FindKnight() { return nullptr; }
}
int main()
{
int ptr = NULL;// 예전 사용 방식
//1) 오동작 방지
Test(0);// Test(int a) 생성자 생성
Test(NULL);// Test(int a) 생성자 생성
Test(nullptr);// Test(void* ptr) 생성자 생성
//2) 가독성
Knight* knight = FindKnight();
if(knight == nullptr) {}
}
nullptr 구현
const
class Knight
{
public:
// 그 어떤 타입의 포인터와도 치환 가능
template<typename T>
operator T* () const
{
return 0;
}
// 그 어떤 타입의 멤버 포인터와도 치환 가능
template<typename C, typename T>
operator T C::* () const
{
return 0;
}
private:
void operator&() const;// 주소갑 &를 사용하지 못하도록 막음
} _nullptr;
int main()
{
// 멤버 포인터 사용 예시
void (Knight::* memFunc)();
memFunc = &Knight::Test();
}
'C++ > [루키스] Modern C++' 카테고리의 다른 글
[MC++] delete (0) | 2023.07.01 |
---|---|
[MC++] enum class (0) | 2023.06.30 |
[MC++] using (0) | 2023.06.29 |
[MC++] 중괄호 초기화 {} (0) | 2023.06.29 |
[MC++] auto (0) | 2023.06.29 |