new失败操作分为两大类:
一、系统和程序内存充足情况。
1、token handle过多不释放,耗尽会导致 new 创建县城失败等,此时虽然内存充足,但是new会抛出异常。
age: OpenProcessToken
在新版本编译器,new 失败会抛出异常,而不是返回null。
查看进程token程序,自行下载编译即可!!
http://www.codeforge.cn/article/93238
二、系统内存不足,这个一定会失败,没什么可说的。
这样new失败会返回null
第一类用法
int *p = new(std::nothrow) int[10];
if(NULL == p )
{
do sth;
}
else
{
}
第二类用法 现在c++编译器new失败会抛出异常
try
{
int *p = new int[10];
}
catch(std::bad_alloc e)
{
}
第三类用法
int *p = new int[10];
if(p==null) //如果内存分配失败了,根本就不会返回null 自行看new内部实现!!!
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);
}