gpt4 book ai didi

c++ - 如果它是针对 vector 中的对象,是否会调用析构函数?

转载 作者:太空狗 更新时间:2023-10-29 20:22:38 25 4
gpt4 key购买 nike

这是我类(class)中的作业,我很难理解背后的原因。

我们有一个没有指针的类 Person 和一个类 Car,如下所示:

class Car{
public:
//stuff
private:
Person* owner;
};

然后一个函数如下:

void f() {
vector<Car> v;
// do stuff with the vector
}

当函数完成时,存在内存泄漏,要修复它,类(class) Material 建议遍历 vector 中的每个 Car 并删除函数 f() 末尾的所有者指针。简单地为 Car 编写一个删除其所有者以防止内存泄漏的析构函数是否足够?

只需在 Car 类中添加:

~Car() {
delete owner;
}

最佳答案

不,这肯定是不够的。你的类(class)是否正确地遵循了 5 的规则? IE。您是否正确定义或删除了复制构造函数、赋值运算符、移动构造函数和移动赋值?您真的准备好自己管理这个指针了吗?

我有两种解决方案。

  1. 根本不要使用指针。从代码中不清楚为什么需要指向 Person 的指针,而不是 Person 类型的对象。您是否以多态方式调用 Person 的成员?除非必须,否则请使用非指针。
  2. 如果你确定你需要一个指针,使用一个能 self 管理的指针。 std::unique_ptr 应该是您的第一站,如果您确定需要共享所有权,请使用 std::shared_ptr

关于c++ - 如果它是针对 vector 中的对象,是否会调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37140754/

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