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

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

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

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

1

Решение

Если вы используете компилятор Microsoft, используйте __debugbreak () который функционально идентичен DebugBreak () функция винапи.
Маловероятно, что он выделяет какую-либо память, так как он просто вставляет __asm 3 код операции (для x86 и эквивалентный код операции на руке).

Это явно не лучший код для выпуска, вы можете проверить наличие отладчика и прервать его, только если IsDebuggerPresent:

CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
if (IsDebuggerPresent())
__debugbreak();
}
2

Другие решения

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

0

По вопросам рекламы [email protected]