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

时间:2015-04-18 23:47:05

标签: c++ object memory dynamic assignment-operator

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

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

存储在对象A中的

是名称“John”,其内存在构造函数中通过

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  

“首先要清除数组,还是在重新分配内存之前不必删除名称?”

这样,您必须始终关注内存管理和de / /分配。您还必须遵守复制结构,作业(参见What is the Rule of Three?)。

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

您必须自己管理nullptr值。 delete / delete []不会自动分配nullptr值,但会为您留下dangling pointer


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

class A {
    std::string name;
};