new expression
complex* pc =new complex(1,2);
//转化为
complex *pc;
try{
1.void* mem= operator new(sizeof(complex));//分配内存,operator可以被重载
2.pc= static_cast(mem);//cast强制转换
3.pc->complex::complex(1,2);//调用构造函数(不能直接调用)
}
catch(std::bad_alloc){
//若allocation失败就不执行constructor
}
operator new源码
void *operator new(size_t size,const std::nothrow_t& _THROW0()){//参数2是为了不抛异常
//try to allocate size bytes
void* p;
while((p==malloc(size))==0){//malloc成功不等于0
_TRY_BEGIN
if(_callnewh(size)==0) break;
_CATCH(std::bad_alloc) return 0;
_CATCH_END
}
return (p);
}
_callnewh为调用new handler,是自己设定的,在内存用光时,调用自己设定的_callmewh函数释放想释放的内存。
以上来自侯捷老师视频仅用于学习。



