Suppose I have a Matrix class, with a constructor as follows:
Matrix::Matrix(int rows, int cols) { nrows = a; //here nrows is the number of rows for each matrix ncols = b; //here ncols is the number of cols for each matrix p = new double [rows*cols]; for(int i=0;i<rows*cols;i++) { *p++ = 0.0; } }
Suppose I also have a copy constructor as follows:
Matrix::Matrix(const Matrix& mat) { p = new double[mat.nrows*mat.ncols]; for(int i=0;i<mat.nrows*mat.ncols;i++) { p[i] = mat.p[i]; } }
Now suppose I have the following lines in my main function:
int main() { Matrix A(2,2); Matrix B(2,2); A = Matrix(B);
Here the '=' operator is overloaded to assign all the elements from B to A. My problem is that after calling the copy constructor, the Matrix A object is a completely new object.
Is there a better way to write a copy constructor so that if matrix A already exists, then calling A = Matrix (B) leads to an error?
source share