[cdl-studenti] [OOP] Eliberare automata de memorie.
Dan-George Filimon
dangeorge.filimon at gmail.com
Sat Mar 6 18:19:22 EET 2010
Nu mi-e clar cum anume implementez adunarea in cazul ala. Oricum la adunare trebuie creat un nou obiect care sa fie intors, deci as putea face asa:
const mine mine::operator+(const mine& x) {
mine helper(max(x.n, this->n));
helper.n = max(x.n, this->n);
int i;
for (i = 0; i < helper.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;
}
si in main() am
z = x + y;
unde operatorul = e definit ca si copy-constructorul tau. Asa e ok?
On Mar 6, 2010, at 6:06 PM, Andrada Georgescu wrote:
> Nu ar trebui să aloci dinamic acolo un nou obiect, îți produce leak-uri (tu nu vei știi niciodată să eliberezi zona alocată
> pentru obiect în sine). Trebuie, după cum spunea și Andrei să îțî definești și un copy-constructor, pe lângă assignment.
> De exemplu:
>
> mine(const mine &x) {
> this->A = new int[x.n];
> this->n = x.n;
> memcpy(this->A, x.A, x.n * sizeof(int));
> }
>
>
>
> --
> Andrada Georgescu
> _______________________________________________
> cdl-studenti mailing list
> cdl-studenti at lists.rosedu.org
> http://lists.rosedu.org/listinfo/cdl-studenti
More information about the cdl-studenti
mailing list