nullptr가 왜 필요한지: 0/NULL의 모호성을 제거nullptr가 “포인터 전용 값”이라는 의미를 설명할 수 있다.a != nullptr && a->b != nullptr 패턴이 왜 안전한지(평가 순서/단락 평가)를 설명할 수 있다.nullptr = “포인터 전용으로 의미가 확실한 없음”0이나 NULL 대신 nullptr를 씁니다.0/NULL은 정수와 섞여서 의미가 헷갈릴 수 있지만, nullptr는 “포인터용 null”이기 때문입니다.추가로 많이 하는 습관:
delete p;
p = nullptr; // "이 포인터는 더 이상 유효한 대상을 가리키지 않는다"를 명확히 표시
단, 이건 “p 하나만” 안전해지는 것이고, 같은 대상을 가리키던 다른 포인터까지 자동으로 안전해지진 않습니다(이전 Step의 다중 포인터 문제).
nullptr로 표현Player* FindPlayer(int id)
{
// ... 로그인된 플레이어 검색 ...
return nullptr; // 못 찾으면
}
int main()
{
Player* p = FindPlayer(123);
if (p != nullptr) {
// 안전하게 사용
}
}
핵심:
nullptr로 표현하는 경우가 매우 많다는 뜻입니다.다음 코드는 안전합니다.
if (player != nullptr && player->_target != nullptr) {
player->_target->_hp = 100;
}
왜 안전한가?
&&는 왼쪽이 false면 오른쪽을 평가하지 않습니다(단락 평가).player == nullptr이면 player->_target 같은 접근 자체가 실행되지 않습니다.실전 규칙:
a->b->c) 왼쪽부터 차례대로 확인하는 습관을 들이면 사고가 크게 줄어듭니다.0/NULL 대신 nullptr를 쓰는 이유는?FindPlayer() 같은 함수가 nullptr를 반환한다는 건 어떤 의미인가?if (p && p->next)가 안전한 이유는? (&&의 동작 관점에서)