关于_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