[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