对象向量的析构函数

姆斯基

你好,

我的班级Ordinateur中有一个* Composant的向量:

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];
    }

}

我想避免内存泄漏...

加利克

如果您使用分配了Composant元素,new 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();析构函数,因为向量会做到这一点本身当你的对象被销毁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章