new一共有3种用法
第一种:new
string *ps=new string("abc");//申请内存,并初始化对象
第二种:operator new
void *buffer=operator new(sizeof(string));//只申请内存
第三种:placement new
buffer=new(buffer)string("abc");//利用给定的内存,初始化
异常处理:new_handler
如果申请的内存不够时,如何编写异常函数。在头文件<new>中
namespace std{
typedef void(*new_handler)();
new_handler set_new_handler(new_handler p) throw();
}
set_new_handler的参数是一个指针,指向operator new无法分配足够内存时应该被调用的函数。
指向set_handler_new被调用前正在执行(但马上就要被替换)的那个new_handler函数。
例如:
void outofmem()
{
cerr<<"Unable meet memory\n"
abort();//中止
}
int main()
{
set_new_handler(outofmem);
int * p=new int[10000000L];
....
}
struct Edge{
int to,flow;
Edge *next;
Edge(int to,int flow,Edge* next):to(to),flow(flow),next(next){}
void* operator new(size_t, void* p){return p;}
void operator delete(void *p){cout<<"we have nothing to do in operator delete"<<endl;}
}*ES[10],TE[10*2]*p;
p=TE;
ES[0]=new(p++)Edge(2,1,ES[0]);
ES[2]=new(p++)Edge(0,1,ES[2]);
ES[0]=new(p++)Edge(3,1,ES[0]);
ES[3]=new(p++)Edge(0,1,ES[3]);