1. bad_alloc类存在于#include<new>头文件中;不过一般用户使用时无需要包含<new>头文件,运行也没问题,不知哪里间接的包含进行去了,未深入去研究这个问题,有知道的可以告知我一下,谢谢!
2. 例子(在vs2015上运行过)
#include <iostream>
using namespace std;
int main()
{
int *a = nullptr;
int j = 1;
try
{
for(;;)
{
a = new int[1000000];
//cout << "j = " << j++ << endl;
}
cout << "hello wrold 1 !!!" << endl;//异常后这句话应该不会运行到,说明CPU的使用权交给了异常处理函数
}catch (float fEx)
{
cout << "float fEx = " << fEx << endl;
}
catch (int iEx)
{
cout << "float iEx = " << iEx << endl;
}
catch (bad_alloc &bE)
{
//cout << "new is fail 111" << bE.what()<<endl;
if(a != nullptr)
//1)如果new失败,new不会调用构造函数,这里应该不用运行到,但是这里确认会进去,不太了解为什么?
//2)以后再研究吧,我没有去查过资料,不过应该是new失败时,没有调用new的构造函数,所以此次if(a!=nullptr)中的a上
//3)次成功时的指针,同时,这里的释放也有问题,因为有无数个new给a,这里只为了演示bad_alloc,不思考代码的严谨
//4)性,这里只释放了一个a指针即一次内存,还有N个内存泄露了。
{
delete a;
a = nullptr;
cout<<"这里可以运行到吗!?"<<endl;
}
cout << "new is fail 111" << endl;
cout << "new is fail 111" << endl;
cout << "new is fail 111" << endl;
}
cout<<"hello world 2 !!!"<<endl;//此句也不会输出
return 0;
}