/*! @file
********************************************************************************
<PRE>
文件名 : Counted.h
文件实现功能 : 构造函数输出id值并且输出“it’s being created”;
析构函数也输出id值并且输出“it is being destroyed”;
使用new创建一个class Counted的对象,并且用delete销毁它;
使用new创建一个class Counted的对象数组,并且用delete[]销毁它;
使内存耗尽,使得在使用new运算符时无法分配内存,并输出提示信息“Out of memory”。
作者 : 2007303138
版本 : 1.0.0
</PRE>
*******************************************************************************/
#ifndef COUNTED_H
#define COUNTED_H
#include <iostream>
using namespace std;
class Counted
{
private:
static int count;
int id;
public:
Counted():id(count ++)
{
cout<<id<<endl;
cout<<"it’s being created"<<endl;
}
~Counted(){
cout<<id<<endl;
cout<<"it is being destroyed"<<endl;
}
};
int Counted::count = 0;
#endif//COUNTED_H
/****************************************************************************/
//以上是count.h
#include <iostream>
#include <new>
#include <cstdlib>
#include "Counted.h"
using namespace std;
//构建结构体,使内存耗尽,
struct Big
{
double stuff[20000];
};
int main()
{
//使用new创建一个class Counted的对象,并且用delete销毁它;
Counted *cnum = new Counted();
delete cnum;
//使用new创建一个class Counted的对象数组,并且用delete[]销毁它;
Counted *carray = new Counted[10];
delete[] carray;
//想办法将内存耗尽,使得在使用new运算符时无法分配内存,并输出提示信息“Out of memory”。
Big * pb;
try
{
pb = new Big[10000000];
}
catch (bad_alloc & ba)
{
cout << "Out of memory"<<endl;
exit(EXIT_FAILURE);
}
return 0;
}
//
//以上是main.h