c++ - Debugbreak()在c++中占用内存吗?

标签 c++ debugbreak

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

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

但是我不确定DebugBreak函数是否会在内存不足时执行?

最佳答案

如果你使用微软编译器使用__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();
}

关于c++ - Debugbreak()在c++中占用内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466685/

相关文章:

c++ - 无法在 Mingw-w64 中使用 "uniform_int_distribution",但 "exponential_distribution"可以使用

c++ - 如何克服屏幕外和屏幕上帧缓冲区渲染之间的差异?

c++ - 谁决定一个字节的大小,是编译器还是CPU?

c++ - operator== 使用 msvc 编译,但不使用 gcc 和 clang 编译

c++ - 为什么在删除对象时获取 DebugBreak()

c++ - 在释放内存之前总是重新分配内存是否安全 - C++

node.js - 进程内存不足时如何处理V8引擎崩溃

c++ - 将 INT3 中断留给 visual studio 上应用程序的异常处理程序

c++ - 在正确的时间点将调试器附加到 VC++ 进程的最佳方法是什么?