0

我在以下代码中收到 std_bad_alloc 错误。问题似乎是当我将矩阵添加到向量时,当我在调试器中到达该行时程序崩溃。问题是只从文件中读取前两个矩阵,其他两个不是因为程序因上述错误而崩溃。

4

2 回答 2

2

在复制构造函数中没有设置 numCols、numRows。

于 2010-10-13T02:20:18.177 回答
2

不是崩溃问题的答案(无论如何已经解决了),但应该注意的是,您的赋值运算符是不必要的浪费,如当前所写:

matrix matrix::operator =(const matrix right)

第一个问题是它按值获取参数。这当然意味着当发生类似的赋值时,会在函数的参数处制作并使用A = B副本。但是在当前代码中,该副本的唯一目的是设置值然后被销毁。您也可以通过 a来避免复制。(或者,您可以将参数保留为按值副本,但将整个运算符实现为copy-and-swap。)BrightAconst matrix&

第二个问题是,这将返回一个matrix. 这也可能导致创建不必要的临时副本。即使编译器可能能够优化掉副本,也没有必要将返回作为按值复制。赋值运算符的标准形式返回对被赋值对象的引用。因此,您应该继续将返回类型设为 amatrix&

于 2010-10-13T03:09:14.983 回答