Hello everyone!

I'm coding an application and I don't understand why it isn't working. I've written a simple example to show you my problem:

Code:

#include <iostream>
using std::cout;
class test {
friend test operator+(test&, test&);
public:
test() {}
test(const int& s1, const int& s2);
double& operator ()(int i, int j) {return v[i][j];}
~test();
protected:
double** v;
int _s1, _s2;
};
int main() {
test t(4, 4);
test a(4, 4);
test b(4, 4);
for (int i = 0; i < 4; i++) {
a(i, i) = i;
b(i, i) = i + 2;
}
t = a + b;
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++)
cout << t(i, j) << " ";
cout << "\n";
}
system("pause");
return 0;
}
test operator+(test& a, test& b)
{
test z(a._s1, a._s2);
for(int i = 0; i < a._s1; i++){
for (int j = 0; j < a._s2; j++)
z(i, j) = a(i, j) + b(i, j);
}
return z;
}
test::test(const int& s1, const int& s2) {
v = new double*[s1];
for (int i = 0; i < s1; i++)
v[i] = new double[s2];
_s1 = s1;
_s2 = s2;
for (int i = 0; i < s1; i++){
for (int j = 0; j < s2; j++)
v[i][j] = 0.0;
}
}
test::~test() {
for (int i = 0; i < _s1; i++)
delete [] v[i];
delete [] v;
}

The problem is that when I do "t = a + b;" the "return z" in the function "test operator+(test&, test&);" it calls the destructor for z before it returns and this makes a crash because the variable t doesn't have anything.

Also, the destructor for "t" is called right after the return from the function causing another crash.

The interesting part is that if I adapt the code to sum vectors intead of matrices, it works!

Any help would be appreciated.

Thanks,

scherzo