해결된 질문
작성
·
42
0
안녕하세요.
마지막 주소록 예제를 따라하면서 궁금한 부분이 있어 질문드립니다.
두 가지 예제를 비교했을 시, 포인터를 초기화 시, NULL / nullptr 두 가지 방식을 모두 사용되고 있습니다. NULL로 초기화와 nullptr 초기화 방식에 있어, 어떠한 기준이 있는지 궁금합니다 ~
int MyList::addNewNode(const char* pName, const char* pPhone)
{
UserData* pNewUser = nullptr; // nullptr로 초기화
if (findNode(pName) != nullptr)
return 0;
pNewUser = new UserData;
strcpy_s(pNewUser->name, sizeof(pNewUser->name), pName);
strcpy_s(pNewUser->phone, sizeof(pNewUser->phone), pPhone);
pNewUser->pNext = NULL; // NULL로 초기화
return 0;
}
void CMyList::releaseList(void)
{
CUserData *pTmp = m_Head.pNext;
CUserData *pDelete = NULL;
while (pTmp != NULL)
{
pDelete = pTmp;
pTmp = pTmp->pNext;
delete pDelete;
}
m_Head.pNext = NULL;
}
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
Connell님, NULL
과 nullptr
의 차이에 대해 설명드리겠습니다.
C++11 이전에는 포인터를 초기화할 때 NULL
을 사용했습니다. 그러나 NULL
은 단순히 정수 0
을 의미하는 매크로에 불과하며, 타입에 대한 명확성이 부족하여 컴파일 시에 여러 가지 문제가 발생할 수 있었습니다.
C++11부터는 이러한 문제를 해결하기 위해 새로운 키워드 nullptr
가 도입되었습니다. nullptr
는 명확히 “포인터가 없음을 나타내는” 타입인 nullptr_t
로, 컴파일러가 더 많은 타입 체킹을 수행할 수 있도록 도와줍니다. 따라서, 타입 안전성을 높이기 위해 C++11 이상을 사용한다면 nullptr
를 사용하는 것이 권장됩니다.
예제 코드에서는 두 가지 초기화 방법을 모두 사용하고 있지만, 코드의 일관성을 위해 C++11 이상의 환경에서는 nullptr
를 사용하시는 것이 좋습니다.
추가로 자세한 내용을 알고 싶다면 다음 링크를 참조하세요:
이해가 잘 되셨길 바라며, 더 궁금한 점이 있으시면 언제든지 질문해 주세요!