Witam. Zawsze mnie zastanawiało. Czy jest jakiś sposób aby w operatorze przypisania wywołać konstruktor kopiujący i destruktor zamiast bezmyslnie kopiowac to co jest w ich ciałach do operatora przypisania ?
class Macierz
{
double **tab;
int w; // wiersze
int k; // kolumny
public:
Macierz() {}; // kon. domyslny
Macierz(int w, int k): w(w),k(k), tab(new double *[w]) // konstruktor z 2 parametrami
{
for(int i=0; i<w; i++)
tab[i] = new double[k];
}
//******************************************************************************************************************************************
Macierz(const Macierz & m) : w(m.w), k(m.k) , tab(new double *[w])// konstruktor kopiujacy
{
for (int i = 0; i < w; i ++ )
tab[i] = new double[k];
for (int i = 0; i < w; i ++ )
for (int j = 0; j < k; j ++ )
tab[i][j] = m.tab[i][j];
}
//******************************************************************************************************************************************
~Macierz()
{
for( int i = 0; i < w; i++ )
delete[]tab[i];
delete[] tab;
}
//******************************************************************************************************************************************
//Operatory
Macierz &operator=(const Macierz wzor)
{
// sprawdz czy nie kopiuje sam siebie
if(&wzor == this)
return *this;
// Czesc destrukcyjna
for( int i = 0; i < w; i++ )
delete[]tab[i];
delete[] tab;
//Czesc konstrukcyjna
w=wzor.w;
k=wzor.k;
// przydzial na pamiec
tab = new double *[w];
for (int i = 0; i <w; i ++ )
tab[i] = new double[k];
for (int i = 0; i < w; i ++ )
for (int j = 0; j < k; j ++ )
tab[i][j] = wzor.tab[i][j];
}