question about overloading operators

hi im trying to make a matrix class which makes use of operator overloading. Ive followed several tutorials, and the one which looked best implemented the binary operators (+ - etc) using unary operators (+=) as such.

Code:

`#include "Matrix.h"`

Matrix::Matrix(int m, int n, float* values)

{

nn = n;

mm = m;

matrix = new float[mm*nn];

for(int mi = 0; mi < mm; mi++)

{

for(int ni = 0; ni < nn; ni++)

{

matrix[mi*nn+ni] = values[mi*nn+ni];

}

}

}

Matrix::Matrix()

{

nn = 1;

mm = 1;

matrix = new float[1];

matrix[0] = 0;

}

Matrix& Matrix::operator=(const Matrix &m2)

{

if(&m2 != this)

{

nn = m2.nn;

mm = m2.mm;

delete[] matrix;

matrix = new float[mm*nn];

for(int mi = 0; mi < mm; mi++)

{

for(int ni = 0; ni < nn; ni++)

{

matrix[mi*nn+ni] = m2.matrix[mi*nn + ni];

}

}

}

return *this;

}

const Matrix& Matrix::operator+=(const Matrix &m2)

{

for(int mi = 0; mi < mm; mi++)

{

for(int ni = 0; ni < nn; ni++)

{

matrix[mi*nn+ni] += m2.matrix[mi*nn + ni];

}

}

wxString output;

output.Printf(_T("%f %f\n%f %f"), matrix[0], matrix[1], matrix[2], matrix[3]);

wxMessageBox(output);

return *this;

}

const Matrix& Matrix::operator+(const Matrix &m2)

{

Matrix result = *this;

result += m2;

return result;

}

the problem is in these examples result is created on the stack (i assume) and i get warning messages whenever i compile. the obvious solution would be to return a Matrix on the heap and write another constructor which accepts a Matrix pointer assign it to itself using the = operator, but this seems messy. whats the standard approach to this problem

thx