C說話new操作的平安性剖析。本站提示廣大學習愛好者:(C說話new操作的平安性剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話new操作的平安性剖析正文
關於進修過C說話的同伙應當都曉得,應用 malloc/calloc 等分派內存的函數時,必定要檢討其前往值能否為“空指針”(亦即檢討分派內存的操作能否勝利),這是優越的編程習氣,也是編寫靠得住法式所必須的。然則,假如你簡略地把這一招運用到new上,那可就紛歧定准確了。我常常看到相似如許的代碼:
int * p = new int [MAXSIZE] if (p == 0) // 檢討p指針能否為空 return -1; //other code
其實,這裡的 if ( p == 0 ) 完整沒成心義的。C++ 裡,假如 new 分派內存掉敗,默許是拋出異常的。所以,假如分派勝利,p == 0 就相對不會成立;而假如分派掉敗了,也不會履行 if ( p == 0 ),由於分派掉敗時,new 就會拋出異常跳事後面的代碼。假如你想檢討 new 能否勝利,應當捕獲異常:
try { int * p = new int [MAXSIZE] } catch( bad_alloc & exp) { cerrr<<exp.what()<<endl; }
然則 有的法式員其實不習氣捕獲異常,尺度C++也供給了一種辦法不拋出異常而前往空指針。
int * p = new (std::nothrow)int [MAXSIZE] if (p == 0) // 檢討p指針能否為空 return -1; //other code