作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
您好,
我在类(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/
我是一名优秀的程序员,十分优秀!