C에서 malloc를 사용하여 메모리를 할당할 경우, NULL을 반환하는지 아닌지에 대한 여부로 메모리 할당 성공 여부를 판단하였다. C++에서 new 연산자를 사용하여 할당할 경우, 동일하게 NULL 반환 여부를 판단하는 코드를 작성하여(예시1의 코드와 같이) 정적분석(Codesona 등) 자동화 도구로 분석하면 Redundant Condition과 Unreachable Call의 두가지 오류를 보게 될 것이다.
C++에서 new 연산자는 기본적으로 자원할당 실패 시 std::bad_alloc를 발생하고 있기 때문이다.
(http://www.cplusplus.com/reference/new/bad_alloc/ 참고)
만약, C에서의 방식대로 NULL 반환여부로 판단하고 싶다면, 예시2) 와 같이 수정하면 된다.
예시1)
void test()
{
int *p = NULL;
p = new int[32];
if ( p == NULL ) // Redundant Condtion
{
printf("hahaha\n"); // unreachable Call
return;
}
delete [] p;
}
예시2)
void test3()
{
int *p = NULL;
p = new (std::nothrow) int[32]; // new 연산자로 할당시 (std::nothrow)를 추가
if ( p == NULL )
{
printf("hahaha\n");
return;
}
delete [] p;
}