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

标签 c++

我有以下内容:

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/

相关文章:

c++ - operator new 是否在 THREAD 堆上分配?

c++ - Linux 服务器,向 Windows 客户端发送文件(Socket)

c++ - 如何有效地规范化 vector C++

c++ - 如何在 Windows 中获取用于特定显示器的显示适配器?

C++ STL::map 查找结构

c++ - 跳过一组特定的字符 scanf 未定义?

c++ - C++ 中的简单运算符重载 =

c++ - 或 C++ : VS2010 multiplication operator being mistaken for a null pointer

c++ - 我正在为 CFD 3D 求解器编写代码,程序针对小尺寸的 3D 矩阵运行,但它显示大尺寸的段错误

c++ - Visual Studio C++ 位域结构大小问题