I am trying to maximise the efficiency of my matrix classes. There's a matrix defined at each grid point i. The elements of the matrix at all grid points are are stored inside ptr00, ptr10 and ptr20. Any adivce?

ie for a 3 x 1 matrix

Code:
class matrix_col { 

 public:

  int i;
  double *ptr00, *ptr10, *ptr20;

  matrix_col(){

    ptr00 = new double[Grids];
    ptr10 = new double[Grids];
    ptr20 = new double[Grids];

    for(i = 0; i < (Grids); i++){

      ptr00[i] = 0;
      ptr10[i] = 0;
      ptr20[i] = 0;
    }
  }

  //copy constructor
  matrix_col(const matrix_col &a){

    int i;
 
    ptr00 = new double[Grids];
    ptr10 = new double[Grids];
    ptr20 = new double[Grids];

    for(i = 0; i < (Grids); i++){

      ptr00[i] = a.ptr00[i];
      ptr10[i] = a.ptr10[i];
      ptr20[i] = a.ptr20[i];
    }
  }

  ~matrix_col(){

    delete [] ptr00;
    delete [] ptr10;
    delete [] ptr20;

  }

  friend matrix_col operator+(const matrix_col &, const matrix_col &);

};


// Overload + for ob1 + ob2.

matrix_col operator+(const matrix_col &left, const matrix_col &right)
{

  int i;
  matrix_col temp;

  for (i = 0; i < Grids; i++){

    temp.ptr00[i] = left.ptr00[i] + right.ptr00[i];
    temp.ptr10[i] = left.ptr10[i] + right.ptr10[i];
    temp.ptr20[i] = left.ptr20[i] + right.ptr20[i];
 
 }

  return temp;
}