Pai operatorul + nu ar trebui sa modifice obiectul curent.<br>De exemplu pe stringuri:<br><br>string x ="ana";<br>string y ="are";<br>string z = x+y;<br><br>cout<< x; //afiseaza "ana", x nu e modificat.<br>
<br><br><div class="gmail_quote">2010/3/6 Dan-George Filimon <span dir="ltr"><<a href="mailto:dangeorge.filimon@gmail.com">dangeorge.filimon@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;">
Nu inteleg de ce ai in definitia operatorului + o noua alocare de memorie.<br>
De ce nu folosesti pointerul this?<br>
<br>
Cand faci un operator ca + m-as gandi ca ai ceva de genul:<br>
<div class="im">mine operator+(const mine x) {<br>
</div> memcpy(this->u, x.u, 10000 * sizeof(int));<br>
return *this;<br>
}<br>
<br>
Asta nu ar face ce vrei?<br>
<div><div></div><div class="h5"><br>
On Mar 6, 2010, at 4:20 PM, marius Dragus wrote:<br>
<br>
> Salut,<br>
><br>
> Incerc sa scriu o clasa "mine" in C++ care sa permita operatorul +.<br>
> Problema este ca fiecare obiect aloca dinamic un array, iar o operatie 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, 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>
</div></div>> _______________________________________________<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>
</blockquote></div><br>