一、nothrowing
nothrowing是C++的一個關鍵字,用於指定調用new操作符時的異常處理方式。當使用nothrowing參數時,如果內存分配失敗,new操作符不會拋出異常,而是返回一個空指針。與之相對的是使用普通的new操作符,如果它無法為對象分配足夠的內存,那麼就會拋出一個std::bad_alloc類型的異常。
#include
using namespace std;
int main() {
int *p;
p = new (nothrow) int[100000000000];
if (p==NULL) cout<<"內存分配失敗";
else cout<<"內存分配成功";
return 0;
}
在上述的代碼中,由於所需的內存過大,程序無法從操作系統中獲得足夠的內存,所以沒有內存被分配給指針p。如果沒有使用nothrow,這段程序將會拋出一個std::bad_alloc異常。
二、nothrow
在C++中,如果內存不足以分配對象,則new操作符會引發std::bad_alloc異常,然而,通過使用nothrow,我們可以避免產生這些異常。在C++中,當nothrow作為new的第二個參數傳遞時,它告訴new操作符,如果內存不足,則返回一個NULL指針而非拋出異常。例如:
#include
using namespace std;
int main() {
int *p;
p = new(nothrow) int[100000000000];
if (p==NULL) cout<<"內存分配失敗";
else cout<<"內存分配成功";
return 0;
}
當內存不足時,該程序將輸出“內存分配失敗”。
三、怎麼讀
在C++程序中,可以按照以下方式發音:no-throw。發音時,聲調應落在’s’和’t’之間的元音上。
四、nothrow new
nothrow和nothrow new之間的區別是:若只使用nothrow,則會返回一個NULL指針;使用nothrow new,則不會返回NULL指針,而是返回一個指向失敗的new操作的指針。例如
#include
using namespace std;
int main() {
int *p;
p = new(nothrow) int[100000000000];
if (p==NULL) cout<<"內存分配失敗";
else cout<<"內存分配成功";
delete[] p;
return 0;
}
此程序將輸出“內存分配成功”,然而,在編寫代碼時,您應該避免在同一程序中同時使用nothrow和nothrow new。
五、nothrowing怎麼讀
nothrowing是C++的一個關鍵字,發音時,應該拼讀new和throwing之間的元音。在此單詞中,’g’不發音。
六、nothrow翻譯
上文中提到的“no-throw”表明其使用的目的,即使用此關鍵字時,將不會拋出一個std::bad_alloc類型的異常。
七、nothrow用法
使用一些其他的new版本時,如在STL中,使用nothrow能夠有效避免異常。例如,當使用vector時,如果它無法為元素分配足夠的內存,就會拋出異常。使用nothrow分配內存可避免中斷程序的執行。例如:
#include
#include
using namespace std;
int main() {
vector v;
try {
for (int i=0; i<1000000000; i++)
v.push_back(i);
}
catch(...) {
cout<<"內存分配失敗";
}
return 0;
}
當數據量過大時,該程序將輸出“內存分配失敗”。但是,如果我們使用nothrow,則可以避免該程序拋出異常。例如:
#include
#include
using namespace std;
int main() {
vector v;
for (int i=0; i<1000000000; i++) {
int *p = new (nothrow) int(1);
if (p==NULL) {
cout<<"內存分配失敗";
break;
}
v.push_back(*p);
}
return 0;
}
該程序將輸出“內存分配失敗”,但是可以在push_back函數之前使用new(nothrow)為元素分配內存。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/180040.html
微信掃一掃
支付寶掃一掃