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

Dan-George Filimon dangeorge.filimon at gmail.com
Sat Mar 6 17:52:55 EET 2010


E vreo modalitate de a evita:

const mine& mine::operator=(const mine &x) {
	if (this != &x) {
		delete [](this->A);
		this->A = new int[x.n];
		this->n = x.n;
		memcpy(this->A, x.A, x.n * sizeof(int));
		//this->print();
	}
	return *this;
}

const mine& mine::operator+(const mine &x) {
	mine *helper = new mine(max(x.n, this->n));
	helper->n = max(x.n, this->n);
	int i;
	for (i = 0; i < min(x.n, this->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;
}

Adica ma gandesc la ceva care sa nu implice pointeri in operatorul + ?

On Mar 6, 2010, at 5:25 PM, Andrei Soare wrote:

> 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.
> 
> 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.
> 
> Mereu cand o clasa are membri alocati dinamic trebuie implementat de mana copy constructor si copy assignment operator.



More information about the cdl-studenti mailing list