当我想在C 中进行new
时,我需要考虑在没有足够内存的情况下应该做什么,因此我编写了以下代码:
CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
DebugBreak();
}
但是我不确定在内存不足时是否会执行DebugBreak
函数?
如果使用Microsoft编译器,请使用__debugbreak((,在功能上与debugbreak((winapi函数相同。它不太可能分配任何内存,因为它只是插入 __asm 3
opcode(对于x86和ARM上的等效opcode(。
这显然不是发布的最佳代码,您可以检查是否存在调试器,并且只有在ISDEBUGGERPRESENT:
时才会中断。CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
if (IsDebuggerPresent())
__debugbreak();
}
如果要捕获一些异常,则应配置异常过滤器。这样,您就不需要编写任何在发布构建中必须删除的特殊调试代码(如果不存在调试器,DebugBreak
将导致过程被终止(。