关于_set_new_handler

 关于_set_new_handler
 
_set_new_handler在MSDN中的声明是
_PNH _set_new_handler( _PNH pNewHandler );

_set_new_handler在MSDN中的说明是:Transfer control to your error-handling mechanism if the new operator fails to allocate memory.翻译过来就是:如果new操作符分配内存失败,则转向_set_new_handler所指定的错误处理机制中去处理。

_set_new_handler具有一个参数:_PNH pNewHandler,_PNH的声明是:
typedef int (__cdecl * _PNH)( size_t );
说明pNewHandler是一个指向某个函数入口的指针,该函数返回一个整型值。如果返回0,则表示告诉new操作符不要尝试去分配内存,返回非0,则表示告诉new操作符继续尝试分配内存。

_set_new_handler具有返回值,返回原先使用的newhandler函数的入口指针。

一个_set_new_handler的使用实例:
该实例可以预期预留一部分内存,当首次new操作符分配失败时,清空该部分内存,让new操作符重新分配,但当第二次分配失败时,则退出。

......

gpszTempMemory = new char[RESERVED_MEMORY_SIZE];

......

int ProcOutOfMemory(size_t size)
{
    if(gpszTempMemory)          // first time, we use our reservation
    {
        delete [] gpszTempMemory;
        gpszTempMemory = NULL;
        return 1;
    }
    else                        // second time, game over~~~
    {
        return 0;
    }
}

......

 _set_new_handler(ProcOutOfMemory);

......

 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=292089

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值