[cdl-studenti] [OOP] Eliberare automata de memorie.
Dan-George Filimon
dangeorge.filimon at gmail.com
Sat Mar 6 17:52:55 EET 2010
E vreo modalitate de a evita:
const mine& mine::operator=(const mine &x) {
if (this != &x) {
delete [](this->A);
this->A = new int[x.n];
this->n = x.n;
memcpy(this->A, x.A, x.n * sizeof(int));
//this->print();
}
return *this;
}
const mine& mine::operator+(const mine &x) {
mine *helper = new mine(max(x.n, this->n));
helper->n = max(x.n, this->n);
int i;
for (i = 0; i < min(x.n, this->n); ++ i)
helper->A[i] = this->A[i] + x.A[i];
for (; i < helper->n; ++ i)
if (i >= x.n)
helper->A[i] = this->A[i];
else
helper->A[i] = x.A[i];
//helper->print();
return *helper;
}
Adica ma gandesc la ceva care sa nu implice pointeri in operatorul + ?
On Mar 6, 2010, at 5:25 PM, Andrei Soare wrote:
> Se elibereaza, intr-adevar, dar dupa ce se copiaza in z. Se va apela apoi destructorul lui y si in final si pe cel al lui z si intr-adevar o sa faca free de 2 ori pe aceeasi zona de memorie.
>
> Ca sa nu faca free de 2 ori pe aceeasi zona de memorie, trebuie neaparat implementat copy constructor si copy assignment operator sa aloce o zona noua de memorie pentru toate datele alocate dinamic din clasa.
>
> Mereu cand o clasa are membri alocati dinamic trebuie implementat de mana copy constructor si copy assignment operator.
More information about the cdl-studenti
mailing list