По какой-то причине я получил код, который выглядел так
typedef std::vector<double> Vector;
void f(Vector const& v) {
Vector const* p;
p = &v;
}
Это кидает bad_alloc
исключение в пункте назначения. Зачем? Имеет ли значение, что f
был вызван на не приведенный вектор? Это C ++ 03, скомпилированный на gcc 4.1.
** Редактировать **
Это внутри некоторого кода, работающего внутри Google Mock, что я вижу исключение. Я пытался вырвать код и скомпилировать его отдельно, и он работал нормально. Смотря дальше
** Дальнейшее редактирование **
Таким образом, проблема была в том, что присваивание происходило в последней строке конструктора объекта, который сам был членом другого объекта. Следующим объектом в списке инициализатора родительского объекта было то, откуда пришло исключение, но GDB заставил его выглядеть так, как будто это происходило в последней строке конструктора предыдущего объекта, где происходило это назначение. Спасибо за все отрицательные отзывы, чтобы напомнить мне, насколько ошибочным был вопрос.
Нет никакого способа, которым код может поднять std::bad_alloc
исключение (или любое другое исключение, в этом отношении), поскольку все, что вы делаете, это присваиваете значение указателя переменной указателя. std::bad_alloc
поднимается new
а также new[]
операторы, когда выделение памяти не удается, и в этом коде такое выделение памяти не выполняется.
Других решений пока нет …