程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話new操作的平安性剖析

C說話new操作的平安性剖析

編輯:關於C++

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved