утечка памяти в классе C ++ - PullRequest
       9

утечка памяти в классе C ++

0 голосов
/ 26 августа 2018

Я определил два класса CA и CB. Я хотел бы предотвратить утечку памяти, и я не знаю, как правильно уничтожить класс CB (при условии, что утечка памяти происходит от него). mpz_t - это тип данных GMP. Вот мой код

class CA {
public:
void SetFoo (unsigned long int);
CA  ();
CA  (unsigned long int);
~CA ();
private:
mpz_t foo;
};

, где

CA::CA () {
mpz_init (foo);
}

CA::CA (unsigned long int in) {
mpz_init   (foo);
mpz_set_ui (foo, in);
}

CA::~CA () {
mpz_clear (foo);
}

void CA::SetFoo (unsigned long int in) {
mpz_set_ui (foo, in);
}

и

class CB {
public:
CB  ();
~CB ();
private:
list <pair<uint16_t, CA*>> mylist;
};

, где

CB::CB () {
pair<uint16_t, CA*> mypair;
CA* C = new CA [2];
C [0].SetFoo (100);
C [1].SetFoo (200);
mypair.first  = 0;
mypair.second = &C[0];
mylist.push_front (mypair);
mypair.first  = 1;
mypair.second = &C[1];
mylist.push_front (mypair);
}

CB::~CB () {
???
}

1 Ответ

0 голосов
/ 26 августа 2018

Вы можете использовать std::unique_ptr вместо обычного указателя.Это автоматически освободит память при уничтожении каждого элемента.

typedef std::unique_ptr<Ca[]> CA_array;
list <pair <uint16_t, CA_array> > mylist;

В качестве альтернативы, вы можете перебирать элементы и освобождать память, используя delete [].

CB::~CB () {
    for (auto &item : mylist) 
        delete [] item.second;
}
...