当我想用new
C ++中的对象时,我需要考虑当内存不足时应该怎么做,所以我写了下面的代码:
CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
DebugBreak();
}
但是我不确定当内存不足时是否会执行DebugBreak
功能?
答案 0 :(得分:2)
如果使用microsoft编译器,请使用功能与__debugbreak() winapi函数相同的DebugBreak()。
它不太可能分配任何内存,因为它只是插入__asm 3
操作码(用于x86和手臂上的等效操作码)。
这显然不是最好的发布代码,您可以检查调试器是否存在并仅在IsDebuggerPresent时打破:
CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
if (IsDebuggerPresent())
__debugbreak();
}
答案 1 :(得分:0)
如果要捕获一些异常,则应配置异常过滤器。这样您就不需要编写必须在发布版本中删除的任何特殊调试处理代码(DebugBreak
将导致在没有调试器的情况下终止进程)。