Dap, a mers asa, merci.<br><br><div class="gmail_quote">2010/3/6 Andrei Soare <span dir="ltr"><<a href="mailto:andrei.soare@gmail.com">andrei.soare@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
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.<br>
<br>
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.<br>
<br>
Mereu cand o clasa are membri alocati dinamic trebuie implementat de mana copy constructor si copy assignment operator.<br>
<div class="im"><br>
-----Original Message-----<br>
From: marius Dragus<br>
<br>
Eu am testat si se cam elibereaza. Se apeleaza destructorul pentru variabila<br>
locala y.<br>
<br>
2010/3/6 Dan-George Filimon <<a href="mailto:dangeorge.filimon@gmail.com">dangeorge.filimon@gmail.com</a>><br>
<br>
> Nu se elibereaza y cand zici tu la pasul 2 din cate inteleg eu.<br>
><br>
><br>
> On Mar 6, 2010, at 4:41 PM, marius Dragus wrote:<br>
><br>
> Nu e ok. Varianta asta e gresita din mai multe motive (produce double free,<br>
> copiaza memorie inexistenta).<br>
><br>
> z= x+y;<br>
><br>
> 0. Se apeleaza operatorul + pentru x<br>
> 1. Se aloca y in operator+.<br>
> 2. Se apeleaza destructorul pentru y<br>
> 3. Se apeleaza operatorul de asignare pentru z ( dar partea dreapta a fost<br>
> eliberata deja la pasul 2 -- deci e gresit)<br>
</div>> 4. Se apelte ca fiecare obiect aloca dinamic un array, iar o operatie<br>
<div><div></div><div class="h5">>>> de genul x =a +b+c ar cauza memory leak-uri.<br>
>>> ><br>
>>> > Cum s-ar putea face asta?<br>
>>> ><br>
>>> > Mai jos este codul. Mentin un contor al constructorilor/destructorilor,<br>
>>> si se vede evident ca se obtin memory leakuri.<br>
>>> ><br>
>>> > Mersi,<br>
>>> > Marius<br>
>>> ><br>
>>> > /*************************CODE*********************/<br>
>>> ><br>
>>> > #include <iostream><br>
>>> ><br>
>>> > int count = 0;<br>
>>> > using namespace std;<br>
>>> ><br>
>>> > struct mine<br>
>>> > {<br>
>>> > int * u;<br>
>>> > mine()<br>
>>> > {<br>
>>> > u = new int[10000];<br>
>>> > count++;<br>
>>> > }<br>
>>> ><br>
>>> > ~mine()<br>
>>> > {<br>
>>> > delete[] u;<br>
>>> > count--;<br>
>>> > }<br>
>>> ><br>
>>> > mine & operator=(const mine & x)<br>
>>> > {<br>
>>> > //cout << "assign" << endl;<br>
>>> > u = x.u;<br>
>>> > }<br>
>>> ><br>
>>> ><br>
>>> > };<br>
>>> ><br>
>>> > mine& operator+(const mine & x, const mine &y)<br>
>>> > {<br>
>>> > mine * ret = new mine;<br>
>>> > return *ret;<br>
>>> > }<br>
>>> ><br>
>>> > int main()<br>
>>> > {<br>
>>> ><br>
>>> > mine a, b, c, d;<br>
>>> > mine e;<br>
>>> ><br>
>>> ><br>
>>> > for (int i = 0; i<10; i++)<br>
>>> > {<br>
>>> > e = a + b + c + d;<br>
>>> ><br>
>>> > }<br>
>>> ><br>
>>> > cout << count << "\n"; // afiseaza 35 desi ar trebui sa fie 5<br>
>>> ><br>
>>> > return 0;<br>
>>> > }<br>
>>> ><br>
>>> > _______________________________________________<br>
>>> > cdl-studenti mailing list<br>
>>> > <a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
>>> > <a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
>>><br>
>>> _______________________________________________<br>
>>> cdl-studenti mailing list<br>
>>> <a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
>>> <a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
>>><br>
>><br>
>> _______________________________________________<br>
>> cdl-studenti mailing list<br>
>> <a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
>> <a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> cdl-studenti mailing list<br>
>> <a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
>> <a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
>><br>
><br>
> _______________________________________________<br>
> cdl-studenti mailing list<br>
> <a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
> <a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
><br>
><br>
><br>
> _______________________________________________<br>
> cdl-studenti mailing list<br>
> <a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
> <a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
><br>
<br>
_______________________________________________<br>
cdl-studenti mailing list<br>
<a href="mailto:cdl-studenti@lists.rosedu.org">cdl-studenti@lists.rosedu.org</a><br>
<a href="http://lists.rosedu.org/listinfo/cdl-studenti" target="_blank">http://lists.rosedu.org/listinfo/cdl-studenti</a><br>
</div></div></blockquote></div><br>