Operator przypisania - poprawność zaspisu

0

Cześć :)
Mam takie pytanko:
Mam klasę, która ma kilka wskaźników do tablic co prowokuje do przeładowania operatora przypisania ;)
Klasa w uproszczeniu wygląda mniej więcej tak:

class klasa
{
public:
klasa(){tablica= nullptr;}
~klasa(){if(tablica) delete[] tablica;
int size;
double* tablica;
int zmienna1;
double zmienna2;
char zmienna3;
//itd;
};

W książce zaleca się najpierw usunięcie już zadeklarowanych tablic i utworzenie ich na nowo a następnie przypisanie im wartości i skopiowanie pozostałych zmiennych.

Zastanawiam się jednak czy nie można pójść troszkę na skróty i zrobić taki "myczek" w funkcji operatora przypisania ;)

klasa& operator=(const klasa& copy)
{
*this = copy; //skopiowanie wszystkich zmiennych tradycyjną metodą (?!?)
if(tablica) delete[] tablica;
tablica = new double[size]; //nowy rozmiar już powinien być w tym obiekcie ;)
for(int i=0; i<size; i++)
tablica[i] = copy.tablica[i];
}

Dzięki temu ograniczamy się tylko do utworzenia nowej tablicy i przepisania jej elementów. Nie musimy natomiast przepisywać wszystkich pozostałych zmiennych, które zostaną automatycznie przekopiowane tradycyjną metodą.
Czy są jakieś przeciwwskazania przed takim podejściem?
Z góry dziękuję za rozjaśnienie moich wątpliwości ;-)

0

Nie ma zadnych, tylko: http://ideone.com/TPQHmR ...

0

Uuu, a skąd ten błąd? Mi w VS 2010 się kompiluje...

0

*this = copy; //skopiowanie wszystkich zmiennych tradycyjną metodą (?!?)

rekurencyjnie wywołujesz operator przypisania, co albo zawiesi ci program, albo wywali z błędem przepełnienia stosu.

0

Jesli wywolasz operator przypisania w operatorze przypisania to on wywola nastepny operator przypisania, itd.
Dodatkowo Twoj pomysl jest jeszcze glupszy, poniewaz kopiujesz adres tablicy, a potem dealokujesz tamta pamiec co spowoduje utrate tej tablicy w obu obiektach. Po utworzeniu nowej tablicy masz okolo size razy AV.

0

Macie rację!!! dzięki za uświadomienie! ;-)
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1