<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 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:<br>
<div class="im"><br>
const mine mine::operator+(const mine& x) {<br>
</div> mine helper(max(x.n, this->n));<br>
<div class="im"> helper.n = max(x.n, this->n);<br>
int i;<br>
</div> for (i = 0; i < helper.n; ++ i)<br>
<div class="im"> helper.A[i] = this->A[i] + x.A[i];<br>
for (; i < helper.n; ++ i)<br>
if (i >= x.n)<br>
helper.A[i] = this->A[i];<br>
else<br>
helper.A[i] = x.A[i];<br>
//helper->print();<br>
return helper;<br>
}<br>
<br>
</div>si in main() am<br>
<br>
z = x + y;<br>
<br>
unde operatorul = e definit ca si copy-constructorul tau. Asa e ok?<br>
<div class="im"><br>
On Mar 6, 2010, at 6:06 PM, Andrada Georgescu wrote:<br>
> Nu ar trebui să aloci dinamic acolo un nou obiect, îți produce leak-uri (tu nu vei știi niciodată să eliberezi zona alocată<br>
> pentru obiect în sine). Trebuie, după cum spunea și Andrei să îțî definești și un copy-constructor, pe lângă assignment.<br>
> De exemplu:<br>
><br>
> mine(const mine &x) {<br>
> this->A = new int[x.n];<br>
> this->n = x.n;<br>
> memcpy(this->A, x.A, x.n * sizeof(int));<br>
> }<br></div></blockquote><div><br>Pare ok, dar va trebui să îi definești pe amândoi, altfel, la iesirea din definirea +, nu va ști exact cum să întoarcă valoarea (efectiv o copie) a obiectului tău alocat pe stivă și se va apela copy-constructorul implicit, care doar va atribui pointerului obiectului<br>
nou creat vechea adresă (dar care între timp a fost eliberată la ieșirea din scop - adică din funcție).<br></div></div><br clear="all"><br>-- <br>Andrada Georgescu<br>