al fin encontre el BUG!!!
tienen razón con lo de la referencia, es para ahorrar memoria y evitar una llamada al constructor. Pero como no me salia y no sabia porque empeze a jugar con la referencia '&' a ver si a la fuerza se arreglaba jeje...
Tuve que leerme algunos libros y nada al final encontre mi respuesta aqui, pero que bien que logre resolver este problema....
"Existen tres casos generales en los cuales se llama al constructor de copia, en lugar del operador de asiganación:- Cuando al instanciar un objeto e iniliazarlo con valores de otro objeto:
- Cuando se pasa el objeto por valor.
- Cuando el objeto es retornado de una función por valor."
Ese era mi problema. Debido a que uso el Template ( vector < type > ) cuando llamo al Constructor de copia mi objeto matriz sólo quedaba definido su tamaño, el constructor no copiaba lo que contenía la matriz.
Esto es lo que tenia para el constructor de copia:
/// Defines the same parameters as 'base' Matrix
Matrix::Matrix(const Matrix& base)
{_nCols = base._nCols;
_nRows = base._nRows;
_matrix.resize(_nRows);
for( int i = 0; i < _nRows; i++ )
_matrix[i].resize(_nCols);
}
Luego lo le agregue que ademas copie los elementos de la matriz.
/// Defines the same parameters as 'base' Matrix
Matrix::Matrix(const Matrix& base)
{_nCols = base._nCols;
_nRows = base._nRows;
_matrix.resize(_nRows);
for( int i = 0; i < _nRows; i++ )
_matrix[i].resize(_nCols);
for( int i = 0; i < _nRows; i++ )
for( int j = 0; j < _nCols; j++ )
_matrix[i][j] = base._matrix[i][j];
}
Y eso fue todo, problema solucionado.... ahora si podre dedicarme a escribir la clase para las operaciones de la matriz!