gpt4 book ai didi

c++ - C++类中的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 02:18:32 25 4
gpt4 key购买 nike

我定义了两个类 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;
}

关于c++ - C++类中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52025860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com