new的用法

本文介绍了C++中new操作符的三种使用方式,包括简单new、operator new及placement new,并展示了如何通过set_new_handler来处理内存不足的情况。此外,还提供了一个使用placement new构造自定义类型的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值