C++编程思想上的题 求高手
//1-5.cpp
//创建一个类,这个类带有自己的new运算符
//这个运算符为十个对象分配内存,并且为第11对象分配内存时抛出"run out of menmory"(内存用完)异常
//并且添加一个静态成员函数用语回收这个内存
//创建main()函数其中包含try块和catch子句,在catch子句中调用回收内存的子例程
//把这些代码放在一个while循环中,用于演示从异常恢复并继续执行的过程 C++ 编程
[解决办法]
struct test
{
std::list< obj *> list;
void Create()
{
for (index = 0; index < 10; index++ ) list.push_back( new obj);
new obj
[解决办法]
throw( "run out of menmory" );
}
static void Release()
{
for( obj* p : list )
{
SAFE_DELETE( p );
}
}
}
int main()
{
try {
test a;
a.Create();
}
catch ( run out of menmory ) {
test::release();
}
return 0;
}
#include <iostream>
#include <new>
#include <stdexcept>
#include <vector>
class example
{
public :
static void* operator new(size_t)
{
if(data_.size() != 10){
data_.push_back(::new example);
return data_.back();
}else{
throw std::bad_alloc();
}
}
static void operator delete(void*) throw()
{
release();
}
static void release()
{
for(std::vector<example*>::iterator it = data_.begin();
it != data_.end(); ++it){
if(*it != 0){
::delete *it;
}
}
//if your compiler support c++11, this one is shorter and more effective
/*for(auto it : data_){
if(*it != 0){
::delete *it;
}
}*/
}
~example(){ release(); }
private :
static std::vector<example*> data_;
};
std::vector<example*> example::data_;
int main()
{
try{
for(size_t i = 0; i != 11; ++i){
example *object = new example;
}
}catch(std::exception const &ex){
std::cout<<ex.what()<<std::endl;
example::release();
}
example::release();
return 0;
}