最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

new的三种表达方式

来源:动视网 责编:小OO 时间:2025-09-29 02:18:31
文档

new的三种表达方式

new的三种表达方式:int*p1=newint;//1int*p2=new(nothrow)int;//2inta;int*p3=new(&a)int;//31.常用的方法,其对应的原函数为:void*__CRTDECLoperatornew(size_tsize)_THROW1(_STDbad_alloc){//trytoallocatesizebytesvoid*p;while((p=malloc(size))==0)if(_callnewh(size)==0){//reportnome
推荐度:
导读new的三种表达方式:int*p1=newint;//1int*p2=new(nothrow)int;//2inta;int*p3=new(&a)int;//31.常用的方法,其对应的原函数为:void*__CRTDECLoperatornew(size_tsize)_THROW1(_STDbad_alloc){//trytoallocatesizebytesvoid*p;while((p=malloc(size))==0)if(_callnewh(size)==0){//reportnome
new的三种表达方式:

int*p1=new int;//1

int*p2=new(nothrow)int;//2

int a;

int*p3=new(&a)int;//3

1.常用的方法,其对应的原函数为:

void*__CRTDECL operator new(size_t size)_THROW1(_STD bad_alloc)

{//try to allocate size bytes

void*p;

while((p=malloc(size))==0)

if(_callnewh(size)==0)

{//report no memory

static const std::bad_alloc nomem;

_RAISE(nomem);

}

return(p);

}

其中:

#define_THROW1(x)throw(...)

#define_RAISE(x)throw x

throw(...)在函数声明中,表示函数中有抛出异常处理。

2.不抛出异常的方法,其对应的原函数为:

void*__CRTDECL operator new(size_t count,const std::nothrow_t&)

_THROW0()

{//try to allocate count bytes

void*p;

_TRY_BEGIN

p=operator new(count);

_CATCH_ALL

p=0;

_CATCH_END

return(p);

}

其中:

#define_THROW0()throw()

#define_TRY_BEGIN try{

#define_CATCH(x)}catch(x){

#define_CATCH_ALL}catch(...){

#define_CATCH_END}

这个函数调用了p=operator new(count)这是1中所说的形式,也就是可能有异常,但是2方法的原函数对这个异常有了处理,所以从整个函数来看是没有抛出异常的,实际上是函数本身调用了常规的new函数,然后并对异常做了处理。

throw()在函数声明中,表示函数中不抛出异常处理。

3.不申请新内存的方法,其原函数为:

inline void*__CRTDECL operator new(size_t,void*_Where)_THROW0() {//construct array with placement at_Where

return(_Where);

}

直接把已有的内存地址返还给某个指针变量。_THROW0()表示函数中不抛出异常。

文档

new的三种表达方式

new的三种表达方式:int*p1=newint;//1int*p2=new(nothrow)int;//2inta;int*p3=new(&a)int;//31.常用的方法,其对应的原函数为:void*__CRTDECLoperatornew(size_tsize)_THROW1(_STDbad_alloc){//trytoallocatesizebytesvoid*p;while((p=malloc(size))==0)if(_callnewh(size)==0){//reportnome
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top