这是我课程中的一项作业,我很难理解其背后的原因。
我们有一个没有指针的Person类和一个Car类,如下所示:
class Car{
public:
//stuff
private:
Person* owner;
};
然后是一个如下函数:
void f() {
vector<Car> v;
// do stuff with the vector
}
函数完成后,会发生内存泄漏,为解决此问题,课程材料建议您遍历向量中的每个Car并删除函数f()末尾的所有者指针。仅仅为Car编写一个析构函数来删除其所有者以防止内存泄漏是不够的吗?
通过在Car类中简单地添加以下内容:
~Car() {
delete owner;
}
不,这肯定是不够的。您的课程是否正确遵循5的规则?即您是否已正确定义或删除了复制构造函数,分配运算符,移动构造函数和移动分配?您真的准备好自己管理该指针了吗?
我有两种解决方案供您选择。
Person
而不是类型的对象Person
。您Person
是多态地叫s成员吗?除非必须使用非指针。std::unique_ptr
应该是您的第一站,如果您确定需要共享所有权,请使用std::shared_ptr
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句