new的用法

来源:互联网 发布:淘宝店铺宝贝详情教程 编辑:程序博客网 时间:2024/06/07 01:42

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]);

1 0
原创粉丝点击