osk*_*osk 3 c++ memory destructor
这是我课程的作业,我很难理解背后的原因.
我们有一个没有指针和类Car的类Person,如下所示:
class Car{
public:
//stuff
private:
Person* owner;
};
Run Code Online (Sandbox Code Playgroud)
然后是一个如下功能:
void f() {
vector<Car> v;
// do stuff with the vector
}
Run Code Online (Sandbox Code Playgroud)
当函数完成时,存在内存泄漏,为了修复它,课程资料建议通过向量中的每个Car并删除函数f()末尾的所有者指针.简单地为Car写一个析构函数是不够的,它会删除它的所有者以防止内存泄漏?
只需在Car类中添加:
~Car() {
delete owner;
}
Run Code Online (Sandbox Code Playgroud)
不,这肯定是不够的.你的班级是否正确遵守5的规则?即你有没有正确定义或删除复制构造函数,assingment操作符,移动构造函数和移动assingment?你真的准备好自己管理这个指针吗?
我有两个解决方案.
Person
,而不是类型的对象Person
.你是Person
多态地打电话给s成员吗?除非必须,否则请使用非指针.std::unique_ptr
应该是您的第一站,如果您确定需要共享所有权,请使用std::shared_ptr
.