无论出于何种原因,我最终得到的代码看起来像这样
typedef std::vector<double> Vector;
void f(Vector const& v) {
Vector const* p;
p = &v;
}
这会在分配时抛出bad_alloc
个异常。为什么?在非转换向量上调用f
是否重要?这是在gcc 4.1上编译的C ++ 03。
**编辑** 这是在google mock中运行的一些代码中,我看到了异常。我试图破解代码并单独编译它,它工作正常。进一步展望
**进一步编辑** 所以问题实际上是赋值发生在一个对象的构造函数的最后一行,该对象本身就是另一个对象的成员。父对象的初始化列表中的下一个对象是异常来自的位置,但是gdb使它看起来像是在上一个对象的构造函数的最后一行发生了这个赋值。感谢所有的支持者提醒我这个问题是多么误导。
答案 0 :(得分:2)
代码可能无法引发std::bad_alloc
异常(或任何其他异常),因为您所做的只是将指针值赋给指针变量。当内存分配失败时,std::bad_alloc
和new
运算符会引发new[]
,并且在此代码中没有执行此类内存分配。