-3

无论出于何种原因,我最终得到的代码看起来像这样

typedef std::vector<double> Vector;
void f(Vector const& v) {
  Vector const* p;
  p = &v;
}

bad_alloc这会在分配点引发异常。为什么?f在非强制转换向量上调用是否重要?这是在 gcc 4.1 上编译的 C++03。

** 编辑 ** 这是在谷歌模拟中运行的一些代码中,我看到了异常。我试图撕下代码并单独编译它,它工作正常。看得更远

** 进一步编辑 ** 所以问题实际上是分配发生在对象的构造函数的最后一行,该对象本身就是另一个对象的成员。父对象的初始化器列表中的下一个对象是异常的来源,但 gdb 让它看起来好像发生在前一个对象的构造函数的最后一行发生了这个赋值。感谢所有的反对票,提醒我这个问题是多么的误导。

4

1 回答 1

2

代码不可能引发std::bad_alloc异常(或任何其他异常,就此而言),因为您所做的只是将指针值分配给指针变量。当内存分配失败时由and运算符std::bad_alloc引发,并且在此代码中没有执行此类内存分配。newnew[]

于 2013-08-07T17:25:18.433 回答