C++中new和new(std::nothrow)

 

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

因此,建議在c++代碼中,凡是涉及到new操作,都採用new(std::nothrow),然後進行Test-for-NULL檢查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章