在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;
}