Когда я хочу new
объект в C ++, мне нужно подумать, что мне делать, когда не хватает памяти, поэтому я написал следующий код:
CacheHeapItem* m_Items;
try{
m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
DebugBreak();
}
Но я не уверен, что DebugBreak
функция будет выполняться при нехватке памяти?
Если вы используете компилятор 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();
}
Если вы хотите перехватить некоторые исключения, вам следует настроить фильтры исключений. Таким образом, вам не нужно писать какой-либо специальный код обработки отладки, который должен быть удален в сборке выпускаDebugBreak
приведет к завершению процесса, если нет отладчика).