gpt4 book ai didi

c++ - 当我替换它们时,我是否需要删除我在类成员中设置的对象?

转载 作者:行者123 更新时间:2023-11-28 00:55:22 25 4
gpt4 key购买 nike

我有以下内容:

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/

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