Является ли Debugbreak() занимает память в C++?

Когда я хочу new объект в C++, мне нужно подумать, что мне делать, когда не хватает памяти, поэтому я написал следующий код:

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

Но я не уверен, что DebugBreak функция будет выполняться при нехватке памяти?

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();
}

Если вы хотите перехватить некоторые исключения, вам следует настроить фильтры исключений. Таким образом, вам не нужно писать какой-либо специальный код обработки отладки, который должен быть удален в сборке релиза (DebugBreak приведет к завершению процесса, если нет отладчика).

Другие вопросы по тегам