Hi,
I ran into a destructor problem that is illustrated in the following code. I have used a stripped down matrix class. The problem is the destructor is invoked when the function testfunc ends. I think the destructor deallocates the memory pointed to by secondmatrix.p. That also means the memory pointed to by firstmatrix.p is deallocated. How do I avoid this so I can continue using firstmatrix later in main.
Thanks,
Peter
Code:
// - - - - - - - - - main.cpp - - - - - - - - - - - -
#include <stdlib.h>
#include "matrix.h"
using namespace std;
void testfunc(matrix secondmatrix){
//doesn't matter what happens in here
}
int main(void) {
matrix firstmatrix(4,5);
testfunc(firstmatrix);
//at this point isn't the memory pointed to by firstmatrix.p gone?
system("PAUSE");
return 0;
}
// - - - - - - - - - matrix.h - - - - - - - - - - - -
#ifndef MAT_H
#define MAT_H
using namespace std;
class matrix {
public:
matrix(){;}
matrix(long,long);
~matrix(){delete [] p;}
protected:
double *p;
long r; /*number of rows*/
long c; /*number of columns*/
};
#endif
// - - - - - - - - - - matrix.cpp - - - - - - - - - - -
#include <assert.h>
#include "matrix.h"
using namespace std;
matrix::matrix(long rows, long cols){
r = rows;
c = cols;
p = new double [rows*cols];
assert (p != 0);
}