对象的动态内存和赋值运算符重载

Dynamic Memory and assignment operator overloading of objects

本文关键字:赋值运算符 重载 内存 动态 对象      更新时间:2023-10-16

如果我使用带有动态内存的赋值运算符重载,我应该检查指针内是否已经有东西吗?

例如,如果对象 A 在构造函数中具有名为"name"的数组的动态内存分配。

存储在对象 A 中的是名称"John",其内存在构造函数中分配

name = new char[strlen(userinput)+1];

如果我想通过赋值运算符重载将对象 B 复制到对象 A 中,我必须写

if(name != null){delete [] name;}
name = new char[strlen(src.name)+1];

首先清除阵列还是在重新分配内存之前不必删除名称?

"先清除阵列,还是在重新分配内存之前不必删除名称?"

这样,您必须始终注意内存管理和取消/分配。你必须遵守副本结构,作业(参见什么是三法则?

if(name != nullptr){delete [] name;}
        // ^^^^^^^ The correct term is nullptr

您必须自己管理nullptr值。 delete/delete []不会自动分配nullptr值,而是给您留下一个悬而未决的指针


与其自己管理动态分配的内存,更好的解决方案是使用适当的容器类,如 std::vector<char>std::string

class A {
    std::string name;
};