当我想在C++中new一个对象时,我需要考虑在内存不足的情况下该怎么办,所以我写了以下代码:
CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
DebugBreak();
}但我不确定当内存不足时是否会执行DebugBreak函数?
发布于 2017-04-18 16:05:39
如果您使用微软编译器,请使用在功能上与DebugBreak() winapi函数相同__debugbreak()。它不太可能分配任何内存,因为它只是插入了__asm 3操作码(用于arm上的x86和等效操作码)。
这显然不是最适合发布的代码,您可以检查调试器是否存在并仅在IsDebuggerPresent
CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
if (IsDebuggerPresent())
__debugbreak();
}发布于 2017-04-18 16:07:14
如果你想捕捉一些异常,你应该配置异常过滤器。这样,您就不需要编写任何必须在release build中删除的特殊调试处理代码(如果没有调试器,DebugBreak将导致进程终止)。
https://stackoverflow.com/questions/43466685
复制相似问题