Вы не рассматриваете случай, когда функция выходит через исключение вместо обычного.Конечно, если вы не можете даже построить std::string
нулевой длины, то ваша программа, вероятно, слишком далеко зашла для восстановления, но определение этого выходит за рамки анализа покрытия кода.
РЕДАКТИРОВАТЬ: Для того, чтобыулучшить покрытие, вы можете макетировать глобальный operator new
, который терпит неудачу на основе некоторого глобального флага (или, более гибко, терпит неудачу при распределении N-го), который вы можете установить в своем тестовом примере.
например,
int allocation_failure = 0;
void* operator new(size_t requestedbytes)
{
if (allocation_failure) {
if (!--allocation_failure) {
throw std::bad_alloc();
}
}
void* retval = malloc(requestedBytes);
if (!retval) {
throw std::bad_alloc();
}
return retval;
}
void operator delete(void* p)
{
if (p) free(p);
}
Или вы можете условно не выполнить выделения определенного размера, или N-е распределение определенного размера и т. Д., Чтобы использовать все возможные пути через ваш код.