gpt4 book ai didi

c++ - 对象 vector 的析构函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:46 24 4
gpt4 key购买 nike

您好,

我在类(class) Ordinateur 中有一个 *Composant vector :

class Ordinateur {

string type;
vector<Composant*> Composants;

...

}

我该如何编写我的析构函数?我在 StackOverflow 上阅读了很多相互矛盾的答案,所以我有点迷茫。

第一个版本:

virtual ~Ordinateur()
{
for (int i = 0; i < Composants.size(); i++)
{
delete Composants[i];
}
Composants.clear();
}

第二版

virtual ~Ordinateur()
{
Composants.clear();
}

关于:

 virtual ~Ordinateur()
{
for (int i = 0; i < Composants.size(); i++)
{
delete Composants[i];
}

}

我想避免内存泄漏......

最佳答案

如果您使用 new Composant(); 分配了 Composant 元素,请使用第一个版本,否则第二个版本将泄漏内存。

virtual ~Ordinateur()
{
for (int i = 0; i < Composants.size(); i++)
{
delete Composants[i]; // this is needed to free the memory
}
// Composants.clear(); // not needed vector cleans itself up
}

但是您可以考虑这样做:

class Ordinateur {

std::string type;
std::vector<std::unique_ptr<Composant>> Composants;

...

}

那么您根本不需要编写析构函数,元素将删除 自己。并且无需在析构函数 中调用Composants.clear();,因为vector 会在您的对象被销毁时自行执行该操作。

关于c++ - 对象 vector 的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922821/

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