次のコードで std_bad_alloc エラーが発生します。問題は、行列をベクトルに追加すると、デバッガーでその行に到達するとプログラムがクラッシュすることです。問題は、最初の 2 つの行列のみがファイルから読み込まれ、他の 2 つの行列は読み込まれないことです。これは、プログラムが上記のエラーでクラッシュするためです。
2 に答える
2
クラッシュの問題に対する答えではありません (いずれにせよ既に処理されています) が、現在書かれているように代入演算子は不必要に無駄であることに注意してください:
matrix matrix::operator =(const matrix right)
最初の問題は、パラメーターを値で取得していることです。これはもちろん、 のような割り当てがA = B
発生すると、 のコピーが作成され、関数のパラメーターでB
使用されることを意味します。right
しかし、現在のコードでは、コピーの唯一の目的は値を設定してからA
破棄することです。const matrix&
コピーを避けるためにa を渡すこともできます。(または、パラメーターを値によるコピーのままにして、オペレーター全体をcopy-and-swapとして実装することもできます。)
2 番目の問題は、これがmatrix
. これにより、不要な一時コピーが作成される可能性もあります。また、コンパイラがコピーを最適化して除去できる場合でも、戻り値を値渡しのコピーにする目的はまったくありません。代入演算子の標準形式は、代入先のオブジェクトへの参照を返します。したがって、先に進んでその戻り値の型をmatrix&
于 2010-10-13T03:09:14.983 に答える
2
コピー コンストラクターのどこにも numCols、numRows を設定しません。
于 2010-10-13T02:20:18.177 に答える