如果我正在使用带动态内存的赋值运算符重载,我应该检查一下指针内是否有东西?
例如,如果对象A在名为“name”的数组的构造函数中具有动态内存分配。
存储在对象A中的是名称“John”,其内存在构造函数中通过
分配name = new char[strlen(userinput)+1];
如果我想通过赋值运算符将对象B复制到对象A中,那么我必须编写
if(name != null){delete [] name;}
name = new char[strlen(src.name)+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;
};