[cdl-studenti] [OOP] Eliberare automata de memorie.

Andrei Soare andrei.soare at gmail.com
Sat Mar 6 18:34:18 EET 2010


Salut,

Da, exista, cel mai bine e sa declari helper pe stiva, si nu pe heap. Si returnezi helper, nu *helper. 

Dupa cum ziceam in mailul anterior, el se va distruge abia dupa ce se va copia intr-o variabila care retine rezultatul functiei.

Si la fel trebuie sa ai grija sa nu returnezi o referinta, cum ai facut tu, ci o valoare, pentru ca altfel dupa ce se incheie functia, rezultatul va fi o referinta catre o zona de memorie distrusa.

-----Original Message-----
From: Dan-George Filimon

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 + ?


More information about the cdl-studenti mailing list