EffectiveC++上的一段代码,VC6上运行出错,请使用其他编译器的朋友帮助运行一下。
#include <new>
//#include <string>
#include <iostream>
using namespace std;
class x
{
public:
static new_handler Set_new_handler(new_handler p);
static void * operator new(size_t size);
private:
static new_handler currenthandler;
};
new_handler x::currenthandler; //缺省设置currenthandler为0(即null)
new_handler x::Set_new_handler(new_handler p)
{
new_handler oldhandler = currenthandler;
currenthandler = p;
return oldhandler;
}
void * x::operator new(size_t size)
{
cout<<"Test Information."<<endl;
new_handler globalhandler = // 安装x的new_handler
/*std::*/set_new_handler(currenthandler);
void *memory;
try { // 尝试分配内存
memory = ::operator new(size);
}
catch (std::bad_alloc&) { // 恢复旧的new_handler
/*std::*/set_new_handler(globalhandler);
throw; // 抛出异常
}
/*std::*/set_new_handler(globalhandler); // 恢复旧的new_handler
return memory;
}
void nomorememory(void);// x的对象分配内存失败时调用的new_handler函数的声明
void main()
{
x::Set_new_handler(nomorememory);// 把nomorememory设置为x的
// new-handling函数
x *px1 = new x; // 如内存分配失败,
// 调用nomorememory
//string *ps = new string; // 如内存分配失败,调用全局new-handling函数
// x::Set_new_handler(0); // 设x的new-handling函数为空
// x *px2 = new x; // 如内存分配失败,立即抛出异常
// (类x没有new-handling函数)
}
void nomorememory()
{
cerr<<"nomorememory"<<endl;
}
问题点数:20、回复次数:3Top
1 楼ma100()回复于 2006-02-02 22:24:14 得分 7
vc8 输出
Test InformationTop
2 楼inutility(埋没)回复于 2006-02-03 13:44:02 得分 6
_set_new_handlerTop
3 楼Cantonese00((⊙_⊙))回复于 2006-02-03 14:01:40 得分 7
dev-c++下通过编译...
无返回啥信息Top




