[英]memory leak in C++ class
我已經定義了兩個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 () {
???
}
您可以使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.