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

Dan-George Filimon dangeorge.filimon at gmail.com
Sat Mar 6 16:26:00 EET 2010


Nu inteleg de ce ai in definitia operatorului + o noua alocare de memorie.
De ce nu folosesti pointerul this?

Cand faci un operator ca + m-as gandi ca ai ceva de genul:
mine operator+(const mine x) {
	memcpy(this->u, x.u, 10000 * sizeof(int));
	return *this;
}

Asta nu ar face ce vrei?

On Mar 6, 2010, at 4:20 PM, marius Dragus wrote:

> Salut,
> 
> Incerc sa scriu o clasa "mine" in C++ care sa permita operatorul +.
> Problema este ca fiecare obiect aloca dinamic un array, iar o operatie de genul x =a +b+c ar cauza memory leak-uri.
> 
> Cum s-ar putea face asta?
> 
> Mai jos este codul. Mentin un contor al constructorilor/destructorilor, si se vede evident ca se obtin memory leakuri.
> 
> Mersi,
> Marius
> 
> /*************************CODE*********************/
> 
> #include <iostream>
> 
> int count = 0;
> using namespace std;
> 
> struct mine
> {
>     int * u;
>     mine()
>     {
>     u = new int[10000];
>     count++;
>     }
> 
>     ~mine()
>     {
>     delete[] u;
>     count--;
>     }
> 
>     mine & operator=(const mine & x)
>     {
>     //cout << "assign" << endl;
>     u = x.u;
>     }
> 
> 
> };
> 
> mine& operator+(const mine & x, const mine &y)
> {
>     mine * ret = new mine;
>     return *ret;
> }
> 
> int main()
> {
> 
>     mine a, b, c, d;
>     mine e;
> 
> 
>     for (int i = 0; i<10; i++)
>     {
>     e = a + b + c + d;
>     
>     }
> 
>     cout << count << "\n"; // afiseaza 35 desi ar trebui sa fie 5
> 
>     return 0;
> }
> 
> _______________________________________________
> 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