在C++编码中使用new分配堆内存时,进行Test-for-NULL检查是一个好习惯。
但是注意这个点:
1.new
在操作符new 和new [ ]内存分配失败的时候抛出的异常,在分配异常的情况下这时的指针myarray不为NULL;
char *p = new char[iSize + 1];
if (NULL == p) // 进行Test-for-NULL检查,自欺欺人
{
return;
}
普通的new操作,如果分配内存失败则会抛出异常,虽然后面一般也会写上if(p == NULL) 进行Test-for-NULL检查,但是实际上是自欺欺人,因为如果分配成功,p肯定不为NULL;而如果分配失败,则程序会抛出异常,if语句根本执行不到。
2.new(std::nothrow)
顾名思义,即不抛出异常,当new一个对象失败时,默认设置该对象为NULL,这样可以方便的通过if(p == NULL) 进行Test-for-NULL检查,来判断new操作是否成功。
char *p = new (std::nothrow) char[iSize + 1];
if (NULL == p) // 进行Test-for-NULL检查,当new一个对象失败时,默认设置该对象为NULL
{
return;
}