C++ deep copy constructor

Moderators: jkien, Xilvo

Reageer
Gebruikersavatar
Berichten: 997

C++ deep copy constructor

Ik probeer een matrix klasse te implementeren waarin de elementen als een array zijn opgeslagen:

class matrix

{

public:

typedef double value_type;

typedef size_t size_type;

enum order_t { row_major, column_major };

// Constructor

matrix(size_type nb_rows, size_type nb_cols, value_type init=0, order_t order=row_major)

: n(nb_rows), m(nb_cols), data(new value_type[nb_rows*nb_cols]), ord(order)

{

value_type* temp=data;

for(size_type i=0;i<nb_rows*nb_cols;++i){

*temp=init;

++temp;

}

}

// (Deep) Copy-constructor

matrix(const matrix& other)

: n(other.n), m(other.m), data(new value_type[other.n*other.m]), ord(other.ord)

{

assert(nb_rows()==other.nb_rows() && nb_cols()==other.nb_cols());

//code a

for(size_type i=0;i<n*m;++i){

data=other.data;

}

//code b

// for(size_type i=0;i<(n+1)*m+1;++i){

// data=other.data;

// }

//alternatieve implementatie

//

// value_type* temp=data;

// value_type* temp_other=other.data;

// for(size_type i=0;i<n*m+10;++i){

// *temp=*temp_other;

//printf("i = %d \n", i);

//printf("a = %f \n", *temp_other);

//printf("b = %f \n", *temp);

// ++temp;

// ++temp_other;

// }

//nog een alternatieve implementatie

// int l=(n+1)*m+1;

// std::copy(other.data, other.data+l, data);

}

// Destructor

~matrix()

{

delete [] data;

std::cout<<"Help I am dying!"<<std::endl;

}

...

protected:

size_type n; // number of rows

size_type m; // number of columns

value_type* data;

order_t ord;

};

// Free functions operating on matrix:

...

Als ik een matrix aanmaak met de constructor en de elementen met een zelf gekozen waarde invul, en die dan afprint, dat werkt. Maar als ik dan een tweede matrix aanmaak met de copy constructor, dan gaat het mis. Met code vult hij de laatste rij niet in, en met code b gaat de laatste rij van de oorspronkelijke matrix ook weer gewijzigd worden (en ik heb geen flauw benul hoe dat kan). Ook de alternatieve implementaties (zie code) geven dezelfde fouten.

ziet iemand wat ik fout doe?

Berichten: 7.068

Re: C++ deep copy constructor

gebruik

Code: Selecteer alles

-tags en geef een compileerbaar en runbaar stukje code. (En dan bedoel ik een stukje code dat laat zien wat het probleem is.)

Gebruikersavatar
Berichten: 997

Re: C++ deep copy constructor

Het probleem is opgelost. Het probleem zat uiteindelijk in mijn data-access functies, waarin ik een fout maakte met mijn pointers.

Reageer