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

marius Dragus mdragus at gmail.com
Sat Mar 6 16:20:35 EET 2010


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;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rosedu.org/pipermail/cdl-studenti/attachments/20100306/ce548732/attachment.htm>


More information about the cdl-studenti mailing list