1

当我想new在 C++ 中创建一个对象时,我需要考虑内存不足时该怎么办,所以我编写了以下代码:

CacheHeapItem* m_Items;
try{
    m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
    DebugBreak();
}

但是不知道DebugBreak内存不足的时候会不会执行这个函数?

4

2 回答 2

2

如果您使用 microsoft 编译器,请使用__debugbreak(),它在功能上与DebugBreak() winapi 函数相同。它不太可能分配任何内存,因为它只是插入__asm 3操作码(对于 x86 和 arm 上的等效操作码)。

这显然不是发布的最佳代码,您可以检查调试器是否存在并仅在IsDebuggerPresent时中断:

CacheHeapItem* m_Items;
try{
    m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
    if (IsDebuggerPresent())
        __debugbreak();
}
于 2017-04-18T08:05:39.333 回答
0

如果你想捕获一些异常,你应该配置异常过滤器。这样您就不需要编写任何必须在发布构建中删除的特殊调试处理代码(DebugBreak如果不存在调试器,将导致进程终止)。

于 2017-04-18T08:07:13.520 回答