C++ new 和異常
new異常,在分配記憶體的時候如果失敗我們可以使用bad_alloc類來完成他在new標頭檔案中,
他是從exception類共有派生而來,當無法分配記憶體給予new一個空指標,使用bad_alloc的
what()來返回輸出
異常如下
#includ<iostream>
#include<new> //必須包含
#include<cstdlib>
using namespace std;
class test
{
public:
double a[20000];
~test(void){cout<<"test"<<endl;}
};
int main(void)
{
test *pd;
try
{
cout<<"Will give big mem?!"<<endl;
pd = new test[10000000];
}
catch (bad_alloc &ba)
{
cout<<"exception!\n";
cout<<ba.what()<<endl;
exit(EXIT_FAILURE);
}
cout<<"mem success\n";
delete [] pd;
}
返回如下:
gaopeng@bogon:~/CPLUSPLUS/part15$ ./a.out
Will give big mem?!
exception!
std::bad_alloc
另外在gcc中我們也可以這樣用使用std::nothrow讓分配記憶體失敗返回一個空指標
#include<iostream>
#include<new>
#include<cstdlib>
using namespace std;
class test
{
public:
double a[20000];
~test(void){cout<<"test"<<endl;}
};
int main(void)
{
test *pd;
pd = new (std::nothrow)test[10000000];
if(pd == 0)
{
cout<<"no mem give!!"<<endl;
exit(EXIT_FAILURE);
}
}
更加簡潔
他是從exception類共有派生而來,當無法分配記憶體給予new一個空指標,使用bad_alloc的
what()來返回輸出
異常如下
#includ<iostream>
#include<new> //必須包含
#include<cstdlib>
using namespace std;
class test
{
public:
double a[20000];
~test(void){cout<<"test"<<endl;}
};
int main(void)
{
test *pd;
try
{
cout<<"Will give big mem?!"<<endl;
pd = new test[10000000];
}
catch (bad_alloc &ba)
{
cout<<"exception!\n";
cout<<ba.what()<<endl;
exit(EXIT_FAILURE);
}
cout<<"mem success\n";
delete [] pd;
}
返回如下:
gaopeng@bogon:~/CPLUSPLUS/part15$ ./a.out
Will give big mem?!
exception!
std::bad_alloc
另外在gcc中我們也可以這樣用使用std::nothrow讓分配記憶體失敗返回一個空指標
#include<iostream>
#include<new>
#include<cstdlib>
using namespace std;
class test
{
public:
double a[20000];
~test(void){cout<<"test"<<endl;}
};
int main(void)
{
test *pd;
pd = new (std::nothrow)test[10000000];
if(pd == 0)
{
cout<<"no mem give!!"<<endl;
exit(EXIT_FAILURE);
}
}
更加簡潔
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2123136/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【C++】 C++異常捕捉和處理C++
- C++異常C++
- C++錯誤和異常處理C++
- C++異常安全C++
- C++筆記--名字空間和異常C++筆記
- C++和結構化異常處理C++
- C++ 異常處理C++
- C++異常處理C++
- C++筆記--異常C++筆記
- 異常和異常呼叫鏈
- C++ new A 和 new A() 的區別詳解C++
- 【C++】C++用new和不用new建立類物件區別C++物件
- Java checked異常和unchecked異常。Java
- C++ 異常機制(上)C++
- c++異常處理格式C++
- c++ 異常處理(2)C++
- c++ 異常處理(1)C++
- C++異常安全的思考C++
- c++異常處理 (轉)C++
- C++之new、delete 與malloc、free的異同C++delete
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- 異常-編譯期異常和執行期異常的區別編譯
- C++異常處理機制C++
- 【c++】異常安全深賦值C++賦值
- Spring cglib 初始化 ExceptionInInitializerError,new Enhancer() 異常SpringCGLibExceptionError
- C++檢測異常assert()函式C++函式
- C++整理19_異常處理C++
- NoClassDefFoundError 和 ClassNotFoundException異常ErrorException
- 異常和中斷
- 異常-自定義異常的實現和測試
- MySQL定義異常和異常處理詳解MySql
- C++ 異常處理機制詳解:輕鬆掌握異常處理技巧C++
- 【C++】C++ new和malloc到底哪裡不一樣C++
- The New C++ (轉)C++
- 在 C++ 中捕獲 Python 異常C++Python
- Linux 下 C++ 異常處理技巧LinuxC++
- C++異常處理與臨時副本C++
- C++基礎::自制異常定位器C++