我有以下内容:
class Manager{
public:
void update(list<Employe> employees){
employees_ = employees;
}
private:
list<Employe> employees_;
};
update方法最后需要删除老员工吗?
最佳答案
没有“老员工”。在这种情况下
list<Employee>::operator = (const list<Employee> & source)
将被调用。如果您没有定义一个,则默认值会将作为参数 (employees) 传递的实例的原始内容复制到字段 (employees_)。
现在假设,该列表包含一个指向动态分配内存的指针。在这种情况下,对该内存的引用将会丢失并且会泄漏。
正确的解决方案是检查 operator = 是否被正确重载(例如所有标准容器都已经实现)或自己实现(伪代码):
void list<Employee>::operator = (const list<Employee> & source)
{
freeContents();
for (int i = 0; i < source.size(); i++)
add(source.getItem(i));
}
编辑:
如果列表实际上是一个 std::list,它会正确处理赋值,所以在这种情况下答案是:是的,列表本身会被自动释放。然而,它的内容是另一回事。
关于c++ - 当我替换它们时,我是否需要删除我在类成员中设置的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739349/