如果我对动态内存使用赋值运算符重载,我应该检查指针内部是否已经有东西吗?
例如,如果对象 A 在构造函数中为名为“name”的数组分配动态内存。
对象A中存储的是名字“John”,内存是通过构造函数分配的
name = new char[strlen(userinput)+1];
如果我想通过赋值运算符重载将对象 B 复制到对象 A 中,我是否必须这样写
if(name != null){delete [] name;}
name = new char[strlen(src.name)+1];
要先清除数组还是在重新分配内存之前不必删除名称?
最佳答案
"To first clear the array out or do I not have to delete name before reallocating memory?"
这样,您就必须始终注意内存管理和取消/分配。您必须遵守复制构造和分配(参见 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;
};
关于c++ - 对象的动态内存和赋值运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29724183/