gpt4 book ai didi

c++ - 我有一个指向对象的指针 vector 。如何释放内存?

转载 作者:太空狗 更新时间:2023-10-29 21:00:12 26 4
gpt4 key购买 nike

例如:

class Airport : public vector<Airline*>

如何正确释放内存?我宁愿不使用智能指针,因为我在我的类(class)中还没有学过它。

最佳答案

正如其他人所指出的,Airport不应继承自 vector . Airport应该包含 vector .然后是谁拥有 Airlines 的问题,您是否希望 Airlines 在 Airport 时被销毁?被摧毁?如果是这样,我建议一个简单的 std::vector<Airline> :

class Airport {
std::vector<Airline> airlines_;
//...
};

或者如果你需要多态性,即 Airline是一个针对不同航空公司的特化的基类我建议使用智能指针:

class Airport {
std::vector<std::unique_ptr<Airline>> airlines_;
//...
};

如果您真的不想使用智能指针,您可以使用原始指针,然后在析构函数中小心删除它们:

class Airport {
std::vector<Airline*> airlines_;
public:
Airport(const Airport&) = delete; // not allowed
Airport& operator=(const Airport&); = delete; // not allowed
~Airport() {
for (auto airline : airlines) {
delete airline;
}
}
//...
};

如果你这样做,你需要仔细考虑你想要什么样的复制行为Airport因为默认的复制构造函数和赋值运算符不会正确管理内存。作为第一步,您可以像我上面那样通过“删除”复制构造函数和赋值运算符来防止复制。但我建议您在了解智能指针后立即使用它们,因为大多数这些问题都会消失。

如果机场不拥有航空公司,则将原始指针或共享智能指针存储在 vector 中,并将其留给拥有航空公司的人以适当释放内存。在我心中Airline可以同时操作多个Airport所以对于 Airport 没有意义拥有 Airline所以应该有一个单独的容器 Airline但这取决于您的型号。

关于c++ - 我有一个指向对象的指针 vector 。如何释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22708015/

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